ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Wagtail 7.1.2 发布说明:StructBlock 折叠摘要标签 label_format 空字符串修复与四项缺陷修正

Wagtail 7.1.2 发布说明:StructBlock 折叠摘要标签 label_format 空字符串修复与四项缺陷修正 Wagtail 7.1.2 发布说明StructBlock 折叠摘要标签 label_format 空字符串修复与四项缺陷修正【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtailWagtail 7.1.2 是一个维护性补丁版本2025 年 10 月 23 日发布它修复了 7.1 系列中的四个缺陷其中最值得关注的是StructBlock.label_format选项的行为补全从本版本开始可以将label_format设置为空字符串以在折叠状态下完全隐藏块摘要标签。本文基于官方发布说明 docs/releases/7.1.2.md 逐条解读这些变更并结合 wagtail/blocks/struct_block.py、client/src/components/StreamField/blocks/StructBlock.ts 等源码与测试用例说明label_format从 7.1 到 7.1.2 的行为演进、底层序列化机制以及升级项目时的迁移检查点。7.1.2 版本内容概览发布说明将本版本内容分为三个部分Bug 修复Bug fixes、文档Documentation和升级注意事项Upgrade considerations。以下逐项列出原文档收录的全部条目。Bug 修复清单允许label_format设置为空字符串以隐藏块摘要标签Sage Abdullah——这是本次修复中与升级注意事项直接呼应的一项详见下文专题分析通过站点主机site hosts更好地支持多站点场景下的 userbar 加载Sage Abdullah——针对跨主机名多站点部署时 Wagtail 用户栏无法正常加载的问题修复自定义泛型 create/edit 视图缺少头部图标时的报错Sage Abdullah——在使用wagtail.admin.viewsets泛型视图自定义创建/编辑页面时若未提供头部图标header icon此前会抛出错误本版本已做容错处理在通过跨源通信cross-origin communications计算内容指标时使用正确的 originSage Abdullah——该内容指标词数、阅读时长等功能在 Wagtail 7.1 中随 headless 预览/userbar 重构一并引入本修复保证了跨域场景下 origin 计算的正确性。文档更新在Page.move()的文档中补充了对 django-treebeardNode.move()的链接Baptiste Mispelon方便开发者理解Page.move()底层依赖的 treebeard 节点移动机制。升级注意事项StructBlock中label_format行为的变更——这是本版本唯一列在影响所有项目的变更章节的条目详见下一节。专题解析label_format空字符串修复行为演进回顾7.1 的变更与 7.1.2 的补全StructBlock自 Wagtail 7.1 起支持折叠/展开折叠状态下会在块标题label之后显示一个摘要标签summary label用来提示折叠块中包含的内容。7.1 引入了label_format选项但 7.1 的发布说明 docs/releases/7.1.md 中已声明该选项行为发生了破坏性调整Wagtail 7.1 中StructBlock的label_format选项已变更为块折叠时始终先显示块原始的label而label_format字符串作为摘要显示在其之后而不是替换label。因此如果你此前将label_format设置为包含或等同于label的内容你可能需要从label_format字符串中删除原label的文本。这一变更遗留了一个缺口在 7.1 中无法完全隐藏摘要标签。在 7.1 之前的版本中可以通过label_format label达到隐藏摘要的效果因为摘要就是 label 本身视觉上等同于无摘要但 7.1 的先 label 后 summary模式下没有了对应写法。7.1.2 的修复正是补上这一点将label_format设置为空字符串即可完全隐藏摘要标签。官方说明原文为如果你希望完全隐藏摘要标签类似于在 Wagtail 7.1 中设置label_format label可以将label_format设置为空字符串。这在 Wagtail 7.1 中无法实现但自本版本起已支持。源码实现从 Python 序列化到 JavaScript 渲染修复的核心在于让空字符串这个合法值能够一路穿透 Python 后端的 Telepath 序列化不被当作未设置丢弃。1. 选项定义与默认值。BaseStructBlock.Meta中定义了label_format None作为默认值见 wagtail/blocks/struct_block.py#L585。None表示未指定使用默认的自动摘要逻辑则是一个显式指令不要显示任何摘要。两者语义不同必须区分。2. Telepath 序列化处的关键判断。StructBlockAdapter.js_args()是修复的直接落点源码注释明确写着特判 None 以允许空字符串见 wagtail/blocks/struct_block.py#L623-L625# Check specifically for None to allow for empty string if block.meta.label_format is not None: meta[labelFormat] block.meta.label_format这里使用is not None而非真值判断truthy check是本次修复的精髓若写成if block.meta.label_format:空字符串会被当成假值跳过labelFormat键根本不会出现在传给前端的 meta 中前端就无法区分显式隐藏与未指定。相同的判断逻辑也适用于嵌套块分组——BlockGroup类同样接受label_format参数其文档字符串明确写道如果你想完全隐藏摘要标签将其设置为空字符串见 wagtail/blocks/struct_block.py#L130-L136并通过js_opts()中的labelFormat: self.label_format原样下发。3. 前端渲染逻辑。客户端的StructBlock组件在getTextLabel()方法中处理该值见 client/src/components/StreamField/blocks/StructBlock.ts#L180-L215getTextLabel(opts?: { maxLength?: number }) { const { labelFormat } this.opts; // Allow using the empty string for the additional text in collapsed state if (typeof labelFormat string) { /* use labelFormat - regexp replace any field references like {first_name} with the text label of that sub-block */ return labelFormat.replace(/\{(\w)\}/g, (_, blockName) { const block this.structBlock.childBlocks[blockName]; if (block block.getTextLabel) { return block.getTextLabel(opts); } return ; }); } /* if no labelFormat specified, just try each child block in turn until we find one that provides a label */ ... }这里用typeof labelFormat string判断是 string会进入格式化分支占位符替换后得到空字符串折叠标签区域自然不显示任何摘要而undefined未设置则回退到依次尝试每个子块直到找到可用标签的自动摘要逻辑。setCollapsedLabelText()在折叠面板上应用该结果并设置了 50 字符的最大长度截断见 client/src/components/StreamField/blocks/StructBlock.ts#L217-L223。4. 单元测试覆盖。测试用例test_adapt_label_format对三种取值None、、{title} ({link})逐一断言js_args的输出确认空字符串能原样出现在js_args[2][labelFormat]中见 wagtail/tests/test_blocks.py#L2866-L2879BlockGroup的序列化测试也验证了label_format字段随组配置下发见 wagtail/tests/test_blocks.py#L2087-L2115。前端测试则覆盖了三类场景按labelFormat生成文本标签、对非法变量名的优雅降级、以及空字符串标签格式见 client/src/components/StreamField/blocks/StructBlock.test.js。实操指南升级时如何调整 label_format假设你在 7.1 之前有这样一段代码class ContactBlock(blocks.StructBlock): name blocks.CharBlock(label姓名) email blocks.EmailBlock(label邮箱) class Meta: label 联系方式 label_format 联系方式{name} # 7.1 之前的写法label_format 替换显示内容在 Wagtail 7.1 中折叠后显示的是联系方式 联系方式张三——label与label_format中的文字重复出现。根据 7.1.2 的升级注意事项应当从label_format中删去与label重复的部分class Meta: label 联系方式 label_format {name} # 只保留摘要部分折叠后显示联系方式 张三如果你希望折叠后只显示联系方式而不显示任何摘要等价于 7.1 之前的隐藏摘要效果class Meta: label 联系方式 label_format # 7.1.2 起支持完全隐藏摘要标签同样的选项也可以在BlockGroup上逐组设置用于嵌套分组场景。选项的完整语义在参考文档 docs/reference/streamfield/blocks.md 中也有说明默认显示第一个子块的值可用花括号占位符自定义如label_format {surname}, {first_name}设置为空字符串则完全隐藏。更多 StreamField 块的自定义编辑界面用法可参考 docs/advanced_topics/customization/streamfield_blocks.md。升级检查清单若你的项目从 Wagtail 7.1 或更早版本升级到 7.1.2建议按以下清单检查全局搜索label_format确认每个使用处中label_format不再包含与label重复的文字该行为变更始于 7.17.1.2 补上了隐藏摘要的空字符串写法需要隐藏摘要的块将原先依赖label_format label旧技巧的写法统一改为label_format 多站点/多主机名部署验证 userbar 在各站点主机上均能正常加载对应本次 userbar 多站点修复;headless 跨域部署若使用了 headless 预览与 userbar 组件确认内容指标词数、阅读时长显示正常自定义泛型视图若基于ModelViewSet等泛型视图自定义了 create/edit 视图验证未提供头部图标的场景不再报错。需要提醒的是以上行为与源码均以当前仓库对应 7.1.x 维护分支状态为准label_format 的隐藏能力自 7.1.2 起可用7.1.0/7.1.1 中该写法无效而先 label 后 summary的显示模式则自 7.1.0 起生效。相关文档索引本版本发布说明docs/releases/7.1.2.md上一版本 7.1 发布说明label_format行为变更的原始出处docs/releases/7.1.mdStructBlock 参数参考docs/reference/streamfield/blocks.mdStreamField 块自定义编辑界面docs/advanced_topics/customization/streamfield_blocks.md后端实现wagtail/blocks/struct_block.py前端实现client/src/components/StreamField/blocks/StructBlock.ts单元测试wagtail/tests/test_blocks.py、client/src/components/StreamField/blocks/StructBlock.test.js【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtail创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表