2016-05-19 15 views
2

セキレイ(またはジャンゴ)で指定されたタイプの子ページを取得します。私は現在の1の子ページを取得するために、次のコードを持っている

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

これは、画像のギャラリーを表示するには、例えば、使用されています(各子ページに画像があります)。

しかし、私は1つのタイプの子供しか持っていないが、別の子供のページを追加しようとすると(例えば、推薦状を表示するために)、上のコードは子タイプのためにフィルタリングしない。すべての子を示します。

私はこの作品を作るための別の方法があるかどうかを知りたいか、私のアプローチは、(子どものページを使用する)間違っている場合。

すべてのヘルプは、それはむしろテンプレート内部よりも、多くの場合、Pythonコードでクエリのこれらの種類を行うには簡単です

答えて

5

:-)いただければ幸いです。 typeはセキレイはクエリセットをフィルタリングするための提供方法の一つである、このコードで

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 

- フルのためPage QuerySet referenceを参照してください:セキレイのページオブジェクトを使用すると、追加の変数を設定することができget_context方法はテンプレートに渡されることを提供しますリスト。定義されたこの方法で

、あなたは、あなたのテンプレート内の変数image_pagesにアクセスすることができます。

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

ありがとうこれはうまくいく:-)! –

1

あなたがこの問題を解決することができる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 %} 
+1

これは良い、ありがとう:-) ..しかし、私は@ガスマンの答えがより有用であると思う..あなたはとにかく感謝!! –

関連する問題