Odoo中Form视图能否使用QWeb模板及渲染异常问题咨询
问题原因与解决方法
- 你在form视图
arch节点内直接内嵌的<template>标签默认不会被QWeb引擎解析,此类自定义模板仅用于供给前端OWL组件调用,未绑定对应组件时,所有t-开头的指令都会原样输出到页面,不会执行求值逻辑。
方案1:轻量实现(无需自定义模板)
如果仅需要展示动态拼接地址的图片,直接通过计算字段配合标准组件实现即可:
- 先在
realestate.property模型中新增计算字段,预处理完整图片地址:
from odoo import models, fields class RealestateProperty(models.Model): _name = 'realestate.property' # 原有字段保留 image_full_url = fields.Char(compute='_compute_image_full_url') def _compute_image_full_url(self): for record in self: record.image_full_url = f'http://localhost:3000/rest/api/{record.image_url}'
- 视图中直接调用该字段,使用图片组件渲染:
<field name="image_full_url" widget="image" string="房产预览图"/>
方案2:保留自定义QWeb模板的实现方式
如果确实需要使用自定义QWeb模板做复杂渲染,需要配套前端OWL组件使用:
- 自定义前端OWL组件,在组件配置中指定关联
templatePreviewBox模板,同时将当前表单的记录数据传入模板上下文 - 在form视图中通过
<widget/>标签挂载你自定义的OWL组件,前端加载组件时会自动解析模板内的所有QWeb指令,完成属性的动态替换。
QWeb语法参考
QWeb分为两类使用场景,语法规则基本一致:
- 后端QWeb:用于报表、网站页面的服务端渲染
- 前端OWL QWeb:用于后台视图的客户端组件渲染
相关语法说明可以在Odoo本地安装的官方文档模块中查阅。
内容的提问来源于stack exchange,提问作者Yosi Pramajaya
相关产品推荐
相关产品推荐

