2016-05-19 41 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答案更有用..無論如何感謝您! –