我创建了许多自定义 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 中时会中断。
我错过了什么?
在块模板中,块值可用作变量
value
,而不是 block
- 因此在 {% for blk in block.value %}
行中,block.value
未定义。应该是:{% for blk in value %}