您当前的位置: 首页 > 

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

odoo10参考系列--QWeb

寒冰屋 发布时间:2018-04-11 12:29:12 ,浏览量:1

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

与前面相同,但参数是一个格式字符串,而不是表达式,通常用于混合文字和非文字字符串(例如类):


                
关注
打赏
1665926880
查看更多评论
0.0469s