Wagtail中如何程序化生成嵌套StreamBlock的内容
嵌套StreamBlock程序化生成的正确写法
你之前的写法失效的核心原因是:所有StreamBlock类型的字段值必须传入列表格式的块集合,哪怕仅需要添加一个子块,也不能直接传入单个块元组。你定义的SpecialistAccordionBlock中content字段为StreamBlock类型,直接传入单个accordion_item元组不符合格式要求。
正确的构造代码如下:
from wagtail.rich_text import RichText # 内层StreamBlock(content字段)需要用列表包裹块元组 accordion_inner_content = [ ("accordion_item", { "title": "Another title", "content": RichText(education_block_str) }) ] # 构造外层accordion块 accordion_block = ("accordion", { "content": accordion_inner_content })
补充注意事项
- 每一级的StreamBlock字段,值都必须是列表结构,列表内每个元素为
(块类型标识名, 块字段键值对字典)格式的元组,可同时放置多个不同类型的块 - 你原有代码中给accordion块传入的
title字段在你给出的SpecialistAccordionBlock定义中不存在,若实际定义中无该字段请删除对应键值对,避免赋值报错 - 若要将生成的块赋值给Page的StreamField,直接将所有顶层块放入列表传入即可,示例:
# 假设Page类的body字段为SpecialistStreamBlock类型的StreamField target_page.body = [ accordion_block, # 可追加其他顶层块 ] target_page.save()
内容的提问来源于stack exchange,提问作者Vlax
相关产品推荐
相关产品推荐

