Odoo 10 QWeb报表头部插入Logo失败问题求助
Odoo 10 QWeb报表头部插入Logo无效的问题分析与解决
我之前在迁移Odoo报表的时候也碰到过类似的情况,你的代码在Odoo 8能运行但Odoo 10失效,主要有几个关键原因,咱们一步步来解决:
核心问题:路径中的多余空格
你写的两段代码里,路径字符串中都加了不必要的空格(比如/ lt_sales / static /...),Odoo 8对静态资源路径的解析比较宽松,会自动忽略这些空格,但Odoo 10的路由解析机制更严格,空格会导致系统无法正确定位到图片文件,这是最直接的失效原因。
正确的写法与优化方案
方案1:修正路径空格,使用动态绑定(推荐)
先把路径里的空格全部去掉,然后用t-att-src动态绑定资源路径,这是QWeb的标准写法,兼容性更好:
<img t-att-src="'/lt_sales/static/src/img/logo.png'" />
方案2:使用系统配置的公司Logo(更灵活)
如果你的报表需要适配多公司场景,或者想直接用系统后台配置的Logo,推荐绑定公司的Logo字段,这样不用硬编码路径:
<!-- 报表上下文通常会自动传入company变量 --> <img t-att-src="image_data_uri(company.logo)" class="img" /> <!-- 如果上下文没有company,也可以通过当前用户的公司获取 --> <img t-att-src="image_data_uri(user.company_id.logo)" class="img" />
这里的image_data_uri是Odoo提供的QWeb工具方法,能把二进制图片数据转换成可直接渲染的Data URI格式。
方案3:使用widget属性增强渲染
如果还是有问题,可以尝试加上widget="image"属性,让Odoo用专门的图片组件来渲染:
<img widget="image" t-att-src="'/lt_sales/static/src/img/logo.png'" />
额外检查步骤
- 确认文件与模块状态:确保
lt_sales模块已经正确安装,并且static/src/img/logo.png文件确实存在于模块的对应目录中,文件名和大小写要完全匹配(Linux系统下路径是区分大小写的)。 - 清除缓存:Odoo会缓存静态资源,修改代码后一定要清除Odoo的服务器缓存(进入「设置」->「技术」->「缓存管理」->「清除缓存」),同时刷新浏览器缓存(Ctrl+F5)。
- 权限验证:确保当前用户有权限访问该模块的静态资源(通常模块安装后默认有权限,但如果是自定义模块可以检查权限设置)。
内容的提问来源于stack exchange,提问作者Saloua SAHNOUNE




