Доступ к StructBlock в StreamField для Page.get_children в трясогузке

Я пытаюсь отобразить StreamField дочерней страницы на странице. Мне не удается отобразить другой StructField в StreamField. Вот мой код

class DefinitionPage(Page):

body = StreamField([
    ('definition', blocks.StructBlock([
        ('heading', blocks.CharBlock(label='Titre')),
        ('paragraph', blocks.RichTextBlock(label='Paragraphe')),
    ]))
])

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

мой шаблон. (DefinitionPage является дочерним элементом этой страницы.)

{% for post in page.get_children %}
    <h2><a href="{% pageurl post %}">{{ post.title }}</a></h2>
    {% for block in post.body %}
        {% include_block block %}
    {% endfor %}
{% endfor %}

post.title в порядке, но в post.body вроде нет блока. Я перепробовал так много вещей, и {% include_block block %} определенно ошибался. Я также попытался добавить собственный шаблон для StructBlock, но безуспешно.

Как я могу сделать? Я использую Django 2.0 и трясогузку 2.0 (я новичок в трясогузке, но читаю документацию). С уважением,

2 ответа

Решение

Вам нужно использовать page.get_children.specific - get_children возвращает только основные Page информация, общая для всех типов страниц, которая не включает body поле в DefinitionPage,

Спасибо, я изменил свой код. В родительской PageModel я добавил:

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

А теперь в моем шаблоне:

{% for definition in definitions %}
    {% for block in definition.body %}
        {%  include_block block %}
    {% endfor %}
{% endfor %}

Я также создал собственный шаблон для своего определения (просто это просто тестирование):

{% load wagtailcore_tags %}

<div class="definition">
    <h2>{{ value.bound_blocks.heading }}</h2>
    {{ value.bound_blocks.paragraph }}
</div>

большое спасибо

Просто последние вопросы: есть ли лучшая практика? . в шаблоне или в пользовательском get_context()? Полезно ли добавлять пользовательский шаблон в StructBlock?

Другие вопросы по тегам