QWeb 是 Odoo 的模板引擎,用于生成 HTML 页面和片段。它基于 XML 格式,允许在模板中使用特定的指令来动态生成内容。以下是 QWeb 的一些关键概念和语法,帮助你理解和使用它。
一:简介
QWeb 是一种基于 XML 的模板引擎,用于生成 HTML 页面和片段。模板中的指令以 t-
开头。
二:template
标签
在 Odoo 中创建 QWeb 视图,需要定义一个 arch
元素,包含以下属性:
- id: 视图的唯一标识符。
- name, inherit_id, priority: 与
ir.ui.view
中的相同,定义视图的名称、继承关系和优先级。 - primary: 设置为
True
时,结合inherit_id
使用,标记为主视图。 - groups: 用逗号分隔的分组 ID。
- page: 设置为
True
时,表示这是一个网页。 - optional: 可选值为
enabled
或disabled
,表示在用户界面中是否可以被禁用,默认可以禁用。
三:QWeb 语法
-
输出内容
使用
t-esc
输出变量的值。<p><t t-esc="content"/></p>
-
条件语句
使用
t-if
、t-elif
和t-else
进行条件判断。<div> <t t-if="condition"> <p>ok</p> </t> </div>
<div> <p t-if="user.birthday == today()">Happy birthday!</p> <p t-elif="user.login == 'root'">Welcome master!</p> <p t-else="">Welcome!</p> </div>
-
循环
使用
t-foreach
和t-as
遍历列表。<t t-foreach="[1, 2, 3]" t-as="i"> <p><t t-esc="i"/></p> </t>
-
属性
使用
t-att-*
动态设置 HTML 属性。-
单个属性:
<div t-att-a="42"/>
-
格式化字符串:
<li t-attf-class="row {{ item_parity }}"/>
-
映射表:
<div t-att="{'a': 1, 'b': 2}"/>
-
元组:
<div t-att="['a', 'b']"/>
-
-
设置变量
使用
t-set
和t-value
定义和赋值变量。<t t-set="foo" t-value="2 + 1"/> <t t-esc="foo"/>
-
调用其他模板
使用
t-call
引用其他模板。<t t-call="other-template"/>
四:Python 专用指令
-
格式化记录
t-field
用于格式化记录字段。t-options
定制字段显示,常用选项是widget
。
-
在视图中渲染模板
使用
ir.ui.view
的render
方法,通过视图 ID 渲染模板。 -
在 Controller 中渲染模板
response = http.request.render('template_name', {'param': value})
五:调试指令
-
日志输出
<t t-log="message"/>
-
断点调试
<t t-if="condition"> <t t-debug=""/> </t>
-
执行 JavaScript
使用
t-js
在渲染时执行 JavaScript 代码。 -
<t t-js="ctx"> console.log("var is", ctx.var); </t>
六:JS 专用指令
-
定义模板
<templates> <t t-name="template-name"> <!-- template code --> </t> </templates>
-
继承模板
使用
t-extend
修改现有模板。<t t-extend="base.template"> <t t-jquery="ul" t-operation="append"> <li>new element</li> </t> </t>
t-jquery
用于选择节点。t-operation
指定操作类型,如append
、prepend
、before
、after
、inner
、replace
。
这些指令和功能使得 QWeb 可以灵活地生成动态网页,适合 Odoo 中的复杂业务逻辑和界面需求。
标签:Odoo,视图,语法,指令,使用,QWeb,模板 From: https://blog.csdn.net/qq_70140795/article/details/144675739