3

我可以在用于其他页面的模板中访问 Mezzanine 页面库中的内容吗?

例如,我有一个画廊页面,其中显示了我在 Django Admin 中添加到“媒体库”的图像集合。该页面工作正常,并显示了我为该页面选择的所有图像。

图库页面模板有一些代码用于显示看起来像...的图像

{% 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 %}

但是,在不同的页面上,我想使用这些相同的图像,在我将用来驱动 jQuery 幻灯片的列表中以相同的顺序。

有没有办法使用类似“{% with page.gallery.images.all as images %}”之类的模板标签,但让它指向包含我想要的图库图像的特定页面?

提前感谢您提供的任何见解。

4

2 回答 2

3

您需要创建上下文处理器,例如:

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

然后将其添加到 TEMPLATE_CONTEXT_PROCESSORS 中的 settings.py

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>

我对夹层不太熟悉,但它应该可以工作,您可以通过视图或其他方式传递上下文并对其进行操作。

于 2013-05-16T05:13:21.447 回答
2

你也可以像这样使用模板标签:

@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" %}

您还需要创建模板以在图库中显示图像..

于 2013-05-17T06:27:42.240 回答