wagtail - 创建新页面时 wagtail 的 StreamField 的默认块
问题描述
有没有办法在创建新页面时使用具有默认块的 StreamField 创建页面模型?
例如我有这个自定义页面:
class CustomPage(Page):
body = StreamField([("text", TextBlock())])
当我打开“添加新页面”视图时,我总是希望在正文中有一个带有默认文本的文本块。
以及如何使用更复杂的块来做到这一点ItemList
?
class Item(StructBlock):
text = CharBlock()
image = ImageChooserBlock()
class ItemList(StructBlock):
items = StreamBlock([("item", Item()),])
解决方案
StreamField
字段定义接受default
由 (block_name, value) 元组列表组成的参数。因此,对于初始状态为单个“文本”块的 StreamField,您可以编写:
class CustomPage(Page):
body = StreamField(
[("text", TextBlock())],
default=[("text", "hello world!")]
)
同样的事情应该适用于更复杂的块类型,但是在指定块值时,您需要注意匹配嵌套中每个点的预期值类型:StreamBlock 对应于上述元组列表,并且StructBlock 对应于 dict 值,因此default
第二项中的值必须是:
- ('item_list', value) 元组的列表,其中 value 是:
- 带有“items”键的字典,其值为:
- ('item', value) 元组的列表,其中 value 是:
- 由“文本”(其值为字符串)和“图像”(其值为图像 ID)组成的字典
(或者类似的东西,无论如何!)
推荐阅读
- c# - DataGridView:对象引用未设置为对象的实例
- android - Android:在自定义适配器上修改数据集
- javascript - Strava API v3 获取所有运动员活动中的访问令牌问题
- python - 全局变量 - 引用后如何分配变量?
- qt-designer - 在 qt 设计器中 QButtonGroup 在 Widget Box 中不可用。
- drop-down-menu - Dropdown select start spinner in Angular 6
- javascript - 类方法在哪里被调用?
- sql-server - SQL Server 中的最后订单日期和年初至今销售额
- google-analytics - 在 Google Analytics 中,如何过滤整个 ISP 但允许特定 IP 地址?
- javascript - 查询选择没有被点击的div来增加它的宽度