在 Wagtail(或 Django)中获取 child 个指定类型的页面
Get child pages of specified type in Wagtail (or Django)
我有以下代码来获取当前页面的 child 页:
{% for subpage in self.get_children %}
...
{% endfor %}
例如,这用于显示图片库(每个 children 页面都有一张图片)。
然而,当我只有一种类型的 children 时,这工作正常,但是,当我尝试添加另一个 child 页面(例如显示推荐)时,上面的代码没有't filter for children type ..so it shows all childs.
我想知道是否有其他方法可以完成这项工作,或者我的方法是否错误(使用 children 页面)。
任何帮助将不胜感激:-)
在 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
在此代码中,type
是 Wagtail 提供的用于过滤查询集的方法之一 - 请参阅 Page QuerySet reference 以获取完整列表。
定义此方法后,您就可以在模板中访问变量 image_pages
:
{% for subpage in image_pages %}
...
{% endfor %}
有两种方法可以解决这个问题。
第一个是按类型过滤视图中的子页面,例如:
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_images
和 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 %}
我有以下代码来获取当前页面的 child 页:
{% for subpage in self.get_children %}
...
{% endfor %}
例如,这用于显示图片库(每个 children 页面都有一张图片)。
然而,当我只有一种类型的 children 时,这工作正常,但是,当我尝试添加另一个 child 页面(例如显示推荐)时,上面的代码没有't filter for children type ..so it shows all childs.
我想知道是否有其他方法可以完成这项工作,或者我的方法是否错误(使用 children 页面)。
任何帮助将不胜感激:-)
在 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
在此代码中,type
是 Wagtail 提供的用于过滤查询集的方法之一 - 请参阅 Page QuerySet reference 以获取完整列表。
定义此方法后,您就可以在模板中访问变量 image_pages
:
{% for subpage in image_pages %}
...
{% endfor %}
有两种方法可以解决这个问题。
第一个是按类型过滤视图中的子页面,例如:
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_images
和 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 %}