2015-09-06 73 views
4

在W CMS CMS中,我試圖創建一個索引頁面,該頁面將顯示其所有子頁面以及與每個子頁面關聯的精選圖像的列表。W::顯示父頁面內的子頁面列表

我在models.py創建這兩個頁面型號:

class IndexPage(Page): 
    intro = RichTextField(blank=True) 

    content_panels = Page.content_panels + [ 
     FieldPanel('intro', classname='full'), 
    ] 

    subpage_types = ['myapp.ItemPage'] 


class ItemPage(Page): 
    representative_image = models.ForeignKey(
     'wagtailimages.Image', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name='+' 
    ) 

    body = RichTextField(blank=True) 

    promote_panels = Page.promote_panels + [ 
     ImageChooserPanel('representative_image'), 
    ] 

    content_panels = Page.content_panels + [ 
     FieldPanel('body', classname='full'), 
    ] 

在模板index_page.html,我添加以下代碼:

<div class="intro">{{ self.intro|richtext }}</div> 

{% for page in self.get_children %} 
    {{ page.title }} 
    {% image page.representative_image width-400 %} 
{% endfor %} 

這將顯示所有子頁面標題,但不是圖像。是否有可能檢索子頁面的圖像字段?

回答

12

release notes of wagtail version 1.1

通常,檢索頁面查詢集的操作(如homepage.get_children())將返回爲基本Pa ge實例,它只包含標題等核心頁面數據。 specific()方法(例如homepage.get_children().specific())現在允許使用最少數量的查詢將它們作爲最具體的類型進行檢索。

因此你不需要在即將發佈的1.1自定義函數了,你可以在你的模板更改爲:

{% for page in self.get_children.specific %} 
    {{ page.title }} 
    {% image page.representative_image width-400 %} 
{% endfor %} 

至少從版本0.8以下應該工作,太,使用specific

{% for page in self.get_children %} 
    {{ page.title }} 
    {% image page.specific.representative_image width-400 %} 
{% endfor %} 
2

我發現這個解決方案:添加功能child_pages到IndexPage:

class IndexPage(Page): 
    intro = RichTextField(blank=True) 

    def child_pages(self): 
     return ItemPage.objects.live().child_of(self) 

    content_panels = Page.content_panels + [ 
     FieldPanel('intro', classname='full'), 
    ] 

    subpage_types = ['myapp.ItemPage'] 

這可以在模板中訪問:

{% for page in self.child_pages %} 
    {{ page.title }} 
    {% image page.representative_image width-400 %} 
{% endfor %}