QWeb是被Odoo[2]使用的主要的模版引擎。它是一个XML模板引擎[1],主要用于生成HTML片段和页面。
模板指令指定的XML属性的前缀 t-
,例如t-if
为条件,与元素和其他属性被直接渲染。
为了避免元素渲染,占位符元素也可用,它执行指令,但本身并不会产生任何输出:
Test
结果如下:
Test
如果condition
是 true:
Test
则结果如下:
Test
数据输出
QWeb有一个主要的输出指令,它自动转移HTML,当显示用户提供的内容esc时,其内容限制XSS风险。
esc
获取表达式,计算并打印内容:
用设置为42的值value来渲染:
42
还有一个输出指令raw,它的行为与esc相同,但HTML没有转义输出。它可以显示分别标记有用(例如功能)或已消毒的用户提供的标记。
条件QWeb有一个条件指令if
, 它评估作为属性值的表达式:
ok
如果条件为true,则渲染元素:
ok
但如果条件为false,则从结果中删除:
条件呈现适用于指令的承载者,它不一定是:
ok
将给出与前面示例相同的结果
附加条件分支指令 t-elif
和t-else
也是可用的:
Happy bithday!
Welcome master!
Welcome!
循环
QWeb有一个迭代指令foreach
,它获取返回集合迭代的表达式,第二参数t-as提供要使用的名称为“当前项”的迭代:
结果如下:
1
2
3
像条件, foreach
适用于包含指令属性的元素,且
相当于前一个例子
foreach
可以迭代数组(当前项将是当前值)、映射(当前项将是当前键)或整数(相当于迭代这包含0而不包含提供证书区间的数组上)。
除了通过t-as传递名称,foreach
为其他数据点提供一些其他变量:
警告
$as
将被传递给t-as的名称替换
$as_all
正在迭代的对象
$as_value
当前迭代值,对于列表和整数与$as相同的,但是对于映射它提供了一个值($as
提供键)
$as_index
当前迭代索引(迭代的第一项有索引0)
$as_size
集合的大小,如果可用的话
$as_first
当前项目是否是迭代的第一个项(相当于$as_index == 0
)
$as_last
当前项目是否是迭代的最后一个(相当于 $as_index + 1 == $as_size
),要求迭代(如数组)大小是可用的
$as_parity
要么是"even"
要么是 "odd"
,当前迭代循环的奇偶性
$as_even
指示当前迭代在偶数索引上的布尔标志
$as_odd
指示当前迭代在奇数索引上的布尔标志
这些提供的额外的变量和所有在foreach中创建的新变量,仅仅在``foreach``范围内是可用的。如果变量存在与foreach的上下文之外, 在foreach循环的最后,值将复制到全局上下文中。
属性
QWeb可以在传输过程中计算属性并在设置输出节点上的计算结果。这是通过t-att
(属性) 指令完成,它存在3种不同的形式:
t-att-$name
一个叫 $name
的属性被创建,属性值被求值,结果被设置为属性值:
结果如下:
t-attf-$name
与前面相同,但参数是一个格式字符串,而不是表达式,通常用于混合文字和非文字字符串(例如类):
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?