Wagtail,如何渲染 StreamField 内 StreamBlock 中的块

问题描述 投票:0回答:1

我创建了许多自定义 StructBlock,可通过 StreamBlock 使用,如下所示:

class ContentStreamBlock(blocks.StreamBlock):
    sub_heading = SubHeadingBlock()
    paragraph = RichTextBlock()
    image = ImageBlock()
    quote = QuoteBlock()

    class Meta:
        template = "blocks/content_stream_block.html"

这个用在Page模型上:


class ContentPage(Page):
    body = StreamField([
        ('block', ContentStreamBlock()),
    ], use_json_field=True)
    content_panels = Page.content_panels + [
        FieldPanel('body'),
    ]

但是,在渲染页面时,它会显示没有值的每个元素。
文件

blocks/content_stream_blocks.html
的构建如下:

{% load wagtailcore_tags wagtailimages_tags %}

<div class="mt-16 max-w-2xl">
    <h2>new block</h2>
    {% for blk in block.value %}
        {% include_block blk %}
    {% endfor %}
</div>

ImageBlock
等自定义 StructBlock 直接在 StreamField 下工作正常,但当包含在子类 StreamBlock 中时会中断。

我错过了什么?

wagtail wagtail-streamfield wagtail-streamblock
1个回答
0
投票

在块模板中,块值可用作变量

value
,而不是
block
- 因此在
{% for blk in block.value %}
行中,
block.value
未定义。应该是:
{% for blk in value %}

© www.soinside.com 2019 - 2024. All rights reserved.