如何修复Odoo sign模块报错:AttributeError: module 'werkzeug' has no attribute 'redirect'
Odoo Sign模块werkzeug.redirect报错排查与修复方案
错误原因
该AttributeError: module 'werkzeug' has no attribute 'redirect'报错是werkzeug版本迭代导致的API变动问题:werkzeug v2.1.0及以上版本将原本顶层可直接调用的redirect方法迁移到了werkzeug.utils子模块下,旧版Odoo Sign模块的代码仍按照旧版werkzeug的调用规则编写,因此触发属性不存在的错误。
排查步骤
- 执行命令
pip show werkzeug查看当前环境安装的werkzeug版本,若Version字段值≥2.1.0即可确认是API变动导致的问题 - 检查
/opt/odoo/enterprise/addons/sign/controllers/main.py文件的导入语句,确认是否仅导入了werkzeug顶层模块,未导入utils子模块下的redirect方法
修复方案
方案1:适配新版werkzeug(推荐)
直接修改报错的代码逻辑,适配新版werkzeug的API规则,不需要降低依赖版本:
- 找到报错的返回行,将原调用路径
werkzeug.redirect修改为werkzeug.utils.redirect,修改后代码如下:
return werkzeug.utils.redirect('/sign/document/%s/%s' % (id, token))
也可以选择在文件头部导入区添加导入语句:
from werkzeug.utils import redirect
然后将报错行修改为:
return redirect('/sign/document/%s/%s' % (id, token))
- 修改完成后重启Odoo服务,验证签署后跳转功能是否正常即可。
方案2:回退werkzeug到兼容版本
如果不想修改官方企业版模块的代码,可以将werkzeug降级到仍支持顶层调用redirect的最后一个稳定版本:
pip install werkzeug==2.0.3
执行完成后重启Odoo服务即可生效。
注意:如果使用的是官方正版Odoo企业版,优先升级对应版本的最新补丁包,官方已针对该werkzeug兼容问题发布了官方修复,避免自行修改官方模块代码后后续版本升级出现冲突。
内容的提问来源于stack exchange,提问作者A.Sasori
相关产品推荐
相关产品推荐

