在Wagtail(或Django)中获取指定类型的子页面

Gio*_*ssi 5 django wagtail

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

{% for subpage in self.get_children %}
    ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

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

我想知道是否有其他方法可以使这项工作或我的方法是错误的(使用子页面).

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

gas*_*man 12

在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
Run Code Online (Sandbox Code Playgroud)

在此代码中,type是Wagtail为筛选查询集提供的方法之一 - 请参阅页面QuerySet引用以获取完整列表.

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

{% for subpage in image_pages %}
    ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)