2013-05-16 2 views
3

Могу ли я получить доступ к содержимому из галереи страниц Mezzanine в шаблоне, который я использую для другой страницы?Как получить доступ к содержимому галереи Django/Mezzanine в другом шаблоне страницы

Например, у меня есть страница галереи, в которой показана коллекция изображений, добавленных в Django Admin в «Media Library». Страница прекрасно работает и отображает все изображения, которые я выбрал для этой страницы.

Шаблон галереи страница содержит код для отображения изображения, которое выглядит как ...

{% with page.gallery.images.all as images %} 
{% for image in images %} 
<li> 
    <a class="thumbnail" rel="#image-{{ image.id }}" title="{{ image.description }}" href="{{ MEDIA_URL }}{{ image.file }}"> 
     <img class="image-overlay-thumb" src="{{ MEDIA_URL }}{% thumbnail image.file 75 75 %}"> 
    </a> 
    <div id="image-{{ image.id }}" class="image-overlay" style="display:none;"> 
     <a href="#" class="image-overlay-prev">&larr;</a> 
     <a href="#" class="image-overlay-next">&rarr;</a> 
     <img class="image-overlay-full" src="{{ MEDIA_URL }}{% thumbnail image.file 0 600 %}"><br> 
     <p>{{ image.description }}<br>{{ forloop.counter }}/{{ images|length }}</p> 
    </div> 
</li> 
{% endfor %} 
{% endwith %} 

Однако на другой странице, я хочу использовать те же изображения, в той же последовательности, в пределах list Я буду использовать, чтобы управлять слайд-шоу jQuery.

Есть ли способ использовать шаблонный тег что-то вроде '{% with page.gallery.images.all как изображения%}', но указать ему на конкретную страницу, на которой есть изображения галереи, которые я хочу?

Заранее благодарим за любую информацию, которую вы можете предоставить.

ответ

3

вам нужно создать контекст процессора, как:

def all_pages(request): 
    from mezzanine.galleries.models import Gallery 
    galleries = Gallery.objects.all() 
    return {'pages': galleries} 

затем добавить его в свой settings.py в TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS += (
    'path.to.our.just.created.context_processor.all_pages', 
) 

затем в шаблоне:

{% load mezzanine_tags %} 

<ul class="thumbnails gallery"> 
{% for page in pages %} 
{% with page.gallery.images.all as images %} 
{% for image in images %} 
<li> 
    <a class="thumbnail" rel="#image-{{ image.id }}" title="{{ image.description }}" href="{{ MEDIA_URL }}{{ image.file }}"> 
     <img class="image-overlay-thumb" src="{{ MEDIA_URL }}{% thumbnail image.file 75 75 %}"> 
    </a> 
    <div id="image-{{ image.id }}" class="image-overlay" style="display:none;"> 
     <a href="#" class="image-overlay-prev">&larr;</a> 
     <a href="#" class="image-overlay-next">&rarr;</a> 
     <img class="image-overlay-full" src="{{ MEDIA_URL }}{% thumbnail image.file 0 600 %}"><br> 
     <p>{{ image.description }}<br>{{ forloop.counter }}/{{ images|length }}</p> 
    </div> 
</li> 
{% endfor %} 
{% endwith %} 
{% endfor %} 
</ul> 

Я не очень знакомый с мезонином, но он должен работать, вы можете передавать контекст в поле зрения или иным образом и манипулировать им.

+0

Спасибо за ответ! Если посмотреть на предлагаемый код, не будет ли этот цикл проходить через ВСЕ страницы (даже те, которые не являются страницами галереи) и обрабатывать любой объект галереи на каждом? Как указать конкретную страницу галереи, на которой есть галерея? В моем случае slug к странице, которую я хочу, это '/ gallery/sar'. –

+0

Обновлено для использования специально для модели Gallery. Вы также можете создать тег шаблона. Я могу показать пример. – MechanisM

+0

СПАСИБО! Я отредактировал ваш фрагмент и добавил оператор if, поэтому я обработаю только конкретную страницу галереи изображений (gallery/sar). Без оператора if ваш фрагмент возвращал ВСЕ изображения из ВСЕХ страниц галереи. Еще раз спасибо. Я изучаю django, mezzanine и python. Ваш пример очень помог. –

2

вы также можете использовать templatetag так:

@register.simple_tag 
def show_gallery_by_slug(slug): 
    from mezzanine.galleries.models import Gallery 
    gallery = Gallery.objects.filter(slug=slug) 
    template = get_template("pages/images.html") 
    c = Context({"gallery": gallery}) 
    return template.render(c) 

, а затем в шаблонах

{% load yourtags %} 

{% show_gallery_by_slug "galleryslugishere" %} 

также необходимо создать шаблон для отображения с для изображения в галерее ..