Django / WagtailCMS - 使用get_context

时间:2017-05-09 17:09:29

标签: python django django-templates wagtail

我正在尝试访问Django / Wagtail CMS博客中子页面的正文。我可以返回子页面标题,但我不知道如何使用它来获取其余的子页面属性。父级是IndexPage,子级是IndexListSubPage。我的模特是:

class IndexPage(Page):
    body = RichTextField(blank=True)
    feed_image = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

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

    def get_context(self, request):
        context = super(IndexPage, self).get_context(request)
        context['sub_pages'] = self.get_children()
        return context

class IndexListSubPage(Page):
    body = RichTextField(blank=True)
    feed_image = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

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

我在模板中尝试了各种组合:

{{ sub_pages }} //returns <QuerySet [<Page: Page title here>]>
{{ sub_pages.body }} //returns nothing

这将返回子页面的页面标题,但我还需要其他属性,例如正文文本。有任何想法吗?我也试过here的图像模板设置 - 再次,我可以获得标题,但没有属性。该页面在管理界面中同时包含图像和正文文本。

1 个答案:

答案 0 :(得分:1)

我按照@gasman的建议将模型更改为包含.specific()。工作模式是:

class ProjectsPage(Page):
body = RichTextField(blank=True)

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

def get_context(self, request):
    context = super(ProjectsPage, self).get_context(request)
    context['sub_pages'] = self.get_children().specific()
    print(context['sub_pages'])
    return context

在模板中:

{% with sub_pages as pages %}
    {% for page in pages %}
         {{ page.title }}
         {{ page.body }}
    {% endfor %}
{% endwith %}

现在正在呈现子页面的标题和正文。