【问题标题】:Default blocks for wagtail's StreamField when a new Page is created创建新页面时 wagtail 的 StreamField 的默认块
【发布时间】:2021-09-22 20:00:47
【问题描述】:

有没有办法在创建新页面时使用具有默认块的 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】:

    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”键的字典,其值为:
    • ('item', value) 元组的列表,其中 value 是:
    • 由'text'(其值为字符串)和'image'(其值为图像ID)组成的字典

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

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多