2017-08-03 11 views
2

私のサイト、ホームページ、ブログインデックス、ブログには3つのメインセクションがあります。私はwagtailのstreamfield関数を使って、ホームページのさまざまなセクションを注文しています。これらのセクションの1つは、最新の3つのブログ投稿用です。Wagtail最新のブログ記事をストリームフィールドでホームページに表示

ブログインデックスページでこれを行っていますが、ストリームフィールドで最新のブログ投稿を取得することはできません。

私のモデルは、私は、ファイルの罰金を呼び出していると私は方法の束を試してみましたが、それはラッパーの罰金をレンダリングするが、私は、データのいずれかをつかむことができない私のブロックフォルダには、この

class CaseStudiesIndex(Page): 
    def casestudies(pages): 
     casestudies = CaseStudyPage.objects.all().order_by('-first_published_at') 
     return casestudies 
    intro = RichTextField(blank=True) 
    content_panels = Page.content_panels + [ 
     FieldPanel('intro', classname="full") 
    ] 

class LatestPosts(blocks.StructBlock): 
    static = blocks.StaticBlock(admin_text='Latest posts: no configuration needed.',) 
    def casestudies(pages): 
     casestudies = CaseStudyPage.objects.all().order_by('-first_published_at')[:3] 
     return casestudies 

    class Meta: 
     icon = 'doc-full' 
     label = 'Latest Posts' 
     template = 'blocks/_latestPosts.html' 

class HomePage(Page): 
    blocksbody = StreamField([ 
     ('lead_banner', LeadBanner()), 
     ('latest_posts', LatestPosts()), 
     ('team', Team()) 
    ],null=True,blank=True) 


    content_panels = Page.content_panels + [ 
     StreamFieldPanel('blocksbody'), 
    ] 

のように見えます何も返されません。

{% load wagtailcore_tags wagtailimages_tags %} 
{% load static %} 

<section> 
    <div class="wrapper__inner"> 
     <ul> 
      {% for case in self.casestudies %} 
       {{case.title}} 
      {% endfor %} 

      {% for case in self.case_studies %} 
       {{case.title}} 
      {% endfor %} 

      {% for case in self.latest_posts %} 
       {{case.title}} 
      {% endfor %} 

      {% for case in page.casestudies %} 
       {{case.title}} 
      {% endfor %} 

      {% for case in page.case_studies %} 
       {{case.title}} 
      {% endfor %} 

      {% for case in page.latest_posts %} 
       {{case.title}} 
      {% endfor %} 
     </ul> 
    </div> 
</section> 

ブログインデックスページでは、次のことができます。

{% extends "inner_base.html" %} 
{% load wagtailcore_tags %} 
{% block body_class %}template-case-studies{% endblock %} 
{% block content %} 
    <section> 
     <div class="wrapper__inner"> 
      <h1>{{self.title}}</h1> 
      <ul> 
       {% include "blocks/CaseStudiesLatestBlock.html" %} 
      </ul> 
     </div> 
    </section> 
{% endblock %} 

そして

{% load wagtailcore_tags wagtailimages_tags %} 
{% load static %} 
{% for case in self.casestudies %} 
    <li> 
     <strong>{{ case.title }}</strong> 
    </li> 
{% endfor %} 

答えて

1

が動作しませんStructBlockに独自のメソッドを定義するように細かなルックスを作品CaseStudiesLatestBlock.html - テンプレートに受信self(またはvalue)変数だけです単純な構造体であり、StructBlockオブジェクト自体ではありません。 (これは直感的ではないかもしれませんが、ブロックの一般的な仕組みと一貫しています:CharBlockCharBlockのインスタンスではなくStructBlockと入力すると、StructBlockではなくdictを与えます)

class LatestPosts(blocks.StructBlock): 
    static = blocks.StaticBlock(admin_text='Latest posts: no configuration needed.',) 

    def get_context(self, value, parent_context=None): 
     context = super(LatestPosts, self).get_context(value, parent_context=parent_context) 
     context['casestudies'] = CaseStudyPage.objects.all().order_by('-first_published_at')[:3] 
     return context 

あなたは、テンプレートでcasestudies変数にアクセスすることができ、例えば:

は代わりに、テンプレートに追加の変数を提供するために、get_context方法(as documented here)を定義することができます{% for case in casestudies %}

+0

ありがとうございました! – PeterGabriel

関連する問題