原文地址:http://www.cnblogs.com/ygj0930/p/7149497.htmljavascript
一:简介css
QWeb是一个基于xml的模板引擎,用于生成HTML片断和页面,模板指令是写在xml标签中的以t-开头的属性,好比t-if
若是要让一个标签不被渲染,能够采用t来包裹,这样会执行它里面的命令可是不产生任何输出。【从这一点看,相似于jsp。】html
建立一个QWeb视图,只须要一个arch元素并包含如下的属性:java
二:XML标签jquery
1:输出内容web
<p><t t-esc="要显示的内容"/></p>
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:json
<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:循环数组
t-foreach用来指定须要循环处理的数据,t-as提供的是在后面用于表明当前项目的变量名。app
<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>
4:属性
qweb能够对属性进行实时计算并在输出时设置,经过t-attr来实现,有三种形式:
1)t-att-属性名
能够根据属性名建立一个属性:
<div t-att-a="42"/> //建立属性a,属性值为42
#输出
<div a="42"></div>
属性值也能够为一个 格式化字符串,能够在运行期间肯定具体值,做为属性值
<li t-attf-class="row {{ item_parity }}">//item_parity在运行时肯定值
2)t-att=mapping
若是参数是映射表,每一个键值对会生成一个属性:
<div t-att="{'a': 1, 'b': 2}"/>
#输出
<div a="1" b="2"></div>
3)t-att=pair
若是参数是元组或2个元素的数组,那么第一个项就做为属性名,第二个做为属性值:
<div t-att="['a', 'b']"/>
#输出
<div a="b"></div>
5:设置变量
使用t-set属性来实现变量声明,它的值就是设置的变量名。而后用t-value属性的属性值做为新变量的值。
<t t-set="foo" t-value="2 + 1"/>
<t t-esc="foo"/>
#输出3
6:调用子模板
<t t-call="other-template"/>会调用指定名字的模板
三:Python专用指令
1:格式化纪录
t-field
只能用于格式化记录字段(从browe函数获取到的),能够根据字段类型自动匹配格式;t-options
只能用于自定义字段,最经常使用的是widget
,其余的选项都是field-xx
或widget-xx
2:在controller中渲染模版
response = http.request.render('my-template', {
'context_value': 42
})
#会直接从controller里返回一个响应对象
3:在视图中渲染模版
在ir.ui.view:
中的render方法:
ir.ui.view
记录会自动加载,它会为渲染环境设置一系列默认值
四:JS专用指令
1:定义模板
<templates>
<t t-name="template-name">
<!-- template code -->
</t>
</templates>
2:继承模板
模板继承是用来修改已存在的模板,即给在其余模块定义的模板添加内容。
经过t-extend
来表示,它的值是被继承的模板名,经过t-jquery来进行修改。
<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>
t-jquery
是一个css选择器,用于选择须要改变的节点,并经过t-operation
指定须要进行的操做
五:调试指令
1:t-log
<t t-log="打印信息"/>
2:断点调试t-debug
<t t-if="condition">
<t t-debug="">
</t>
3:t-js
该节点内容里的javascript代码会在渲染时执行,接收一个context参数,将当前的环境传给js,从而可使用context.XX调用上下文中的内容。
<t t-js="ctx">
console.log("var is", ctx.var);
</t>