创建新页面时 wagtail 的 StreamField 的默认块

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

有没有办法创建一个带有 StreamField 的页面模型,该模型在创建新页面时具有默认块?

例如我有这个自定义页面:

class CustomPage(Page):
    body = StreamField([("text", TextBlock())])

当我打开“添加新页面”视图时,我总是希望在正文中有一个带有默认文本的文本块。

如何使用像

ItemList
这样更复杂的块来做到这一点?

class Item(StructBlock):
    text = CharBlock()
    image = ImageChooserBlock()

class ItemList(StructBlock):
    items = StreamBlock([("item", Item()),])
wagtail wagtail-streamfield wagtail-admin
1个回答
3
投票

A

StreamField
字段定义接受由 (block_name, value) 元组列表组成的
default
参数。因此,对于初始状态为单个“文本”块的 StreamField,您可以编写:

class CustomPage(Page):
    body = StreamField(
        [("text", TextBlock())],
        default=[("text", "hello world!")]
    )

同样的事情应该适用于更复杂的块类型,但是在指定块值时,您需要注意匹配嵌套中每个点的预期值类型:StreamBlock 对应于上面的元组列表,并且 StructBlock 对应于一个 dict 值,因此第二个项目中的

default
值必须是:

  • ('item_list', value) 元组列表,其中 value 是:
    • 带有“items”键的字典,其value是:
      • ('item', value) 元组列表,其中 value 是:
        • 由“text”(其value是字符串)和“image”(其value是图像ID)组成的字典

(或者类似的东西,无论如何!)

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