1. 简介
QWeb是DTCloud使用的主要模板引擎。它是XML模板引擎,主要用于生成HTML片段和页面。模板指令是写在xml标签中,以t-开头。
2. template标签
创建一个QWeb视图,只需要一个arch元素并包含以下的属性:
● id – 视图的id
● name, inherit_id, priority 与ir.ui.view的一致
● primary – 设置为True并与inherit_id一起使用时,设置为主视图
● groups – 以逗号分隔的分组id
● page – 设置为True时,该页面为网页
● optional – enabled 或 disabled,在用户界面中是否可以被禁用,默认是可以禁用
3. Qweb语法
3.1 输出内容
### 3.2 条件语句:t-if属性值为True时,输出t标签包含内容
<div>
<t t-if="condition">
<p>ok</p>
</t>
</div>
#当condition是true的时候解析成:
<div>
<p>ok</p>
</div>
#condition为false的时候解析成
<div>
</div>
还有t-elif/t-else:
<div>
<p t-if="user.birthday == today()">Happy bithday!</p>
<p t-elif="user.login == 'root'">Welcome master!</p>
<p t-else="">Welcome!</p>
</div>
3.3 循环
t-foreach用来指定需要循环处理的数据,t-as提供的是在后面用于代表当前项目的变量名。
<t t-foreach="[1, 2, 3]" t-as="i">
<p><t t-esc="i"/></p>
</t>
#上述语句输出:
<p>1</p>
<p>2</p>
<p>3</p>
3.4 属性
qweb可以对属性进行实时计算并在输出时设置,通过t-attr来实现,有三种形式:
- t-att-属性名 可以根据属性名创建一个属性:
<div t-att-a="42"/> //创建属性a,属性值为42
#输出
<div a="42"></div>
属性值也可以为一个 格式化字符串,可以在运行期间确定具体值,作为属性值<li t-attf-class="row {{ item_parity }}">//item_parity
在运行时确定值
-
t-att=mapping 如果参数是映射表,每个键值对会生成一个属性:
<div t-att="{'a': 1, 'b': 2}"/> #输出 <div a="1" b="2"></div>
-
t-att=pair 如果参数是元组或2个元素的数组,那么第一个项就作为属性名,第二个作为属性值:
<div t-att="['a', 'b']"/>
#输出
<div a="b"></div>