2016-05-19 44 views
2

我有以下代码来获取当前的子页面:获取鹡鸰(或Django的)指定类型的子页面

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

这是使用,例如,显示图像的画廊(每个子页面都有一个图像)。

但是,这只适用于我只有一种类型的孩子,但是,当我尝试添加另一个子页面(例如显示褒奖)时,上面的代码不会筛选子类型。显示所有的孩子。

我想知道是否有另一种方法来使这项工作或如果我的方法是错误的(使用儿童网页)。

任何帮助:-)

回答

5

往往更容易做这些类型的查询在Python代码,而不是在模板中可以理解的。鹡鸰页面对象提供了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是鹡鸰提供一种用于过滤查询集的方法之一 - 看到Page QuerySet reference为全名单。

利用所定义的这个方法,你就可以访问你的模板中的变量image_pages

{% for subpage in image_pages %} 
    ... 
{% endfor %} 
+0

谢谢这个工程,看起来不错:-)! –

1

有就可以解决这个两种方式。

第一种是按类型来过滤你的子页面在您看来,如:

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 %} 
+1

这看起来不错,谢谢:-) ..但我认为@gasman答案更有用..无论如何感谢您! –