如何修复Odoo网站模板调用portal_layout时的image_url报错
报错原因
从报错堆栈中的节点信息<t t-set="x_icon" t-value="website.image_url(website, 'favicon')"/>可以定位根因:portal.portal_layout依赖的上下文变量website为空值(NoneType),调用image_url方法时触发属性错误。portal.portal_layout继承了网站基础布局模板,默认需要当前网站对象作为上下文参数才能正常渲染。
解决方法
1. 补充上下文参数
在控制器渲染模板之前,给values字典传入website变量即可:
# 插入到return request.render代码之前 values['website'] = request.website
如果是多网站场景需要绑定订单所属公司的网站,可手动指定:
# 优先取订单所属公司绑定的网站,兜底用当前请求的网站 website = request.env['website'].sudo().search([('company_id', '=', order_sudo.company_id.id)], limit=1) values['website'] = website or request.website
2. 可选补充其他通用上下文
如果后续出现其他上下文变量缺失的报错,可以补充portal布局常用的默认参数:
values.update({ 'website': request.website, 'user': request.env.user, 'is_public_user': request.env.user._is_public(), })
修改后重启Odoo服务,即可正常加载portal布局的CSS样式,不会再触发该报错。
内容的提问来源于stack exchange,提问作者A.Sasori
相关产品推荐
相关产品推荐

