升级Wagtail 2.15.6至2.16时除首页外页面全部报错求助
Wagtail 2.16升级后出现AttributeError: 'tuple' object has no attribute 'root_path'
问题现象
- 从Wagtail 2.15.6升级至2.16版本后,除站点根页面外,所有前端页面、Django及Wagtail后台页面均抛出
AttributeError: 'tuple' object has no attribute 'root_path'错误 - 错误触发于
wagtail/core/models/__init__.py第1109行
运行环境
- Python 3.7(Docker容器部署)
- Django 3.2
- Wagtail版本路径:2.12 → 2.15.6(升级成功)→ 2.16(出现问题)
触发逻辑
错误由全局上下文处理器site_settings触发:
- 该处理器调用
NationalOffice模型的serialized_data方法 - 方法中访问
self.privacy_page等Wagtail Page外键字段时,触发Wagtail核心代码报错
问题根源
Wagtail 2.16新增的_get_relevant_site_root_paths方法中,代码尝试访问srp.root_path属性,但_get_site_root_paths实际返回的是元组列表,而非带属性的对象实例,导致属性访问失败。此问题关联Wagtail 2.16稳定版的特定代码提交,但未被官方升级文档列为破坏性变更。
修复方案
临时回退方案
直接回退到Wagtail 2.15.6版本,等待官方发布修复补丁。
临时代码修改方案
修改Wagtail核心代码wagtail/core/models/__init__.py中的_get_relevant_site_root_paths方法:
- 将
srp.root_path替换为元组索引访问(例如srp[0],需根据_get_site_root_paths返回元组的结构确认具体索引),适配元组类型的数据结构。
业务代码调整方案
调整全局上下文处理器site_settings的逻辑:
- 避免在全局上下文处理器中直接访问Wagtail Page外键字段,改为在视图层按需加载相关页面数据,或使用延迟加载方式减少核心代码调用冲突。
内容的提问来源于stack exchange,提问作者mjreffel
相关产品推荐
相关产品推荐

