2017-08-03 69 views
2

我在我的網站,主頁,博客索引和博客特定3個主要部分。我在w using中使用流場功能來訂購主頁中的各個部分。其中一個部分是最新的三篇博文。W Show在主頁上顯示最新博客文章通過streamfield

我已經爲博客索引頁做了這個,但不能抓住流場中的最新博客文章。

我的模型看起來像這樣

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> 

對於可以工作的Blog Index頁面,我執行以下操作。

{% 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對象本身。 (這似乎是違反直覺的,但它與塊的一般工作原理一致:就像CharBlock給你一個字符串值,而不是一個CharBlock實例工作,StructBlock給你一個字典,而不是一個StructBlock實例)

相反,你可以定義一個get_context方法(as documented here)提供額外的變量到模板:

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變量模板,例如{% for case in casestudies %}

+0

作品感謝! – PeterGabriel

相關問題