【问题标题】:Get child pages of specified type in Wagtail (or Django)在 Wagtail(或 Django)中获取指定类型的子页面
【发布时间】:2016-05-19 22:16:17
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: django wagtail


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这看起来不错,谢谢 :-) ..但我认为@gasman 的答案更有用..还是谢谢你!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多