8

我有以下代码来获取当前页面的子页面:

{% for subpage in self.get_children %}
    ...
{% endfor %}

例如,这用于显示图像库(每个子页面都有一个图像)。

但是,当我只有一种类型的孩子时,这很好用,但是,当我尝试添加另一个子页面(例如显示推荐)时,上面的代码不会过滤孩子类型..所以它显示所有孩子。

我想知道是否有另一种方法可以完成这项工作,或者我的方法是否错误(使用子页面)。

任何帮助,将不胜感激 :-)

4

2 回答 2

16

在 Python 代码中执行这些类型的查询通常比在模板中更容易。Wagtail 页面对象提供了一种get_context方法,您可以在其中设置要传递到模板的其他变量:

class GalleryIndexPage(Page):
    # ... field definitions here ...

    def get_context(self, request):
        context = super(BlogIndexPage, self).get_context(request)
        context['image_pages'] = self.get_children().type(ImagePage)
        return context

在此代码中, typeWagtail 提供了一种用于过滤查询集的方法 - 请参阅Page QuerySet 参考以获取完整列表。

定义此方法后,您可以访问image_pages模板中的变量:

{% for subpage in image_pages %}
    ...
{% endfor %}
于 2016-05-19T22:40:14.527 回答
3

有两种方法可以解决这个问题。

第一个是按类型过滤视图中的子页面,例如:

page = Page.objects.get(slug='current-page')
pages_with_images = Page.objects.filter(parent=page, type='image')
pages_with_testimonials = Page.objects.filter(parent=page, type='testimonial')

然后,在您的模板中,您可以分别遍历pages_with_imagesand pages_with_testimonials

{% for subpage in pages_with_images %}
    ...
{% endfor %}

{% for subpage in pages_with_testimonials %}
    ...
{% endfor %}

第二种解决方案是检查模板中子页面的类型:

{% for subpage in self.get_children %}
    {% if subpage.type == 'image' %}
        ...
    {% endif %}
{% endfor %}
于 2016-05-19T22:40:41.133 回答