注册报表:
@string: 在打印按钮那里的显示名称
@id:外id标识
@name: 完整主模板名称 模块名.主板模名称 用于管理和调用
@file: 完整模板文件名 模块名.模板文件名 用于更好地关联模板
@model:相关的模型显示在那个模块进行打印报表 通常在各视图中的打印那里会出现上面表示在采购订单相关视图时,会出现“打印-询价单/采购订单”
@report_type: 报表类型 是 qweb-pdf 或 qweb-html
@report_name: 打印出来的文件名
@groups_id:指定权限
0 1 2 3 4 |
attachment_use="True" attachment="(object.state in('open','paid')) and ('INV'+(object.number or'').replace('/','')+'.pdf')" |
@attachment_use:使用附件,这样不会一直查数据库,只能当数据变化时才会查数据库
@attachment:附件的名称,当我们下载下来的文件名
报表模板
模板中的标签统一都是以”t-”开始的。
t-name 用于指明模板的名称
t-extend 用于指明该模板是继承自另外哪一个模板,后面会带父模板的名称,如:t-extend=“Login”
t-jquery 一个jQuery的选择器,后面指明选择器的定义,如:t-jquery=”.oe_logiin”
t-operation 一般跟在t-jquery后面,指明选择器找到元素后执行的动作,其值有:append(追加)、replace(替换)
t-if 用于指明元素在页面产生的条件,后面是带一个javascript的表达式,返回True或False
条件表达式
0 1 2 3 4 |
<tt-if="record.effort_estimate.raw_value > 0"> <li>Estimate <fieldname="effort_estimate"/></li> </t> |
比较符号:
0 |
lt(<) lte(<=) gt(>) gte(>=) |
注 <<= 不能用在表达式中,只能用字母代替
t-att-### 用于指明一个元素的属性值,###是元素的属性名称,如:t-att-value=”javascript表达式”
# 属性的字符替换
0 1 2 3 4 5 6 7 8 9 10 |
<spant-attf-class="oe_kanban_text{{ record.date_deadline.raw_value and !(record.date_deadline.raw_value> (new Date())) ? '_red' : '_black' }}"> <fieldname="date_deadline"/> </span> |
t-attf-prefixed 取代内容,上面的就是动态类
t-att=mapping 键值对组成属性,主要用多对
0 |
<div t-at="{'a':1,'b':2}"/> |
结果:
0 |
<div a="1"b="2"></div> |
t-att=pair 一对,这个对一个是键,后一个是值
0 |
<div t-att="['a','b']"/> <=> <div t-att="('a','b')"/> |
结果:
0 |
<diva="b"></div> |
t-foreach 用于指明一个循环调用,后面一般带的是一个数组
还有一些变量
rec_index 从0开始循环索引
rec_size 要循环的记录集大小
rec_first 第一个元素
rec_last 最后一个元素
rec_even index为偶数时为真
rec_odd index为奇数时为真
rec_parity 是偶数和奇数
rec_all 表示循环结束的标识
rec_value 循环一个字典时,的键的值
t-as 用于取得循环中的单个值,与t-foreach搭配使用,后面带的是一个变量名,可以循环中使用变量取值
t-esc 用于一个文字输出。过滤安全值,像html元素
t-raw 数据库中的原始数据输出
t-call 用于调用另外模板,后面带一个模板的名称
t-set 用于设定一个变量,后面带变量的名称,一般跟t-value搭配使用
0 |
<t t-set="new_variable"t-value="True" /> |
设置了变量 new_variable 的值 为 True
t-value 也可以是表达
0 |
<t t-set="foo"t-value="2+1" > |
设置了变量foo值为3
t-value可以是一段html
0 1 2 3 4 |
<t t-set="foo"> <li>ok</li> </t> |
设置了变量foo 为 <li>ok</li>
t-value 用于指定某个变量或元素的值
# 动态属性
0 1 2 3 4 5 6 7 8 |
<div> <t t-foreach="record.message_follower_ids.raw_value.slice(0,3)" t-as="rec"> <imgt-att-src="kanban_image('res.partner', 'image_small',rec)" /> </t> </div> |
t-att- prefixed 如 <img>的src 就可以 t-att-src=”…”
#设置属性
t-att-$name
$name 是属性名
0 |
<div t-att-a="66" /> |
结果:
0 |
<diva="66"></div> |
t-attf-$name 用于混合,有字符串也有变量,变量用{{}}
0 1 2 3 4 |
<t t-foreach="[1, 2, 3]"t-as="item"> <li t-attf-class="row {{item_parity }}"><t t-esc="item"/></li> </t> |
t-att=mapping 键值对组成属性,主要用多对
0 |
<div t-at="{'a':1,'b':2}"/> |
结果:
0 |
<div a="1"b="2"></div> |
t-att=pair 一对,这个对一个是键,后一个是值
0 |
<div t-att="['a','b']"/> <=> <div t-att="('a','b')"/> |
结果:
0 |
<diva="b"></div> |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?xmlversion="1.0" encoding="utf-8"?> <openerp> <data> <templateid="report_invoice"> <tt-call="report.html_container"> <tt-call="report.layout"> <div class ="page"> <div class='text-center'> <span>123</span> </div> </div> </t> </t> </template> </data> </openerp> |
docs:当前报表的记录
doc_ids:记录中的id集
list of ids for the docsrecords
doc_model:记录的模型
model for the docs records
time:Python标准库中引用的time
user:为用户打印报表的res.user记录
res_company:当前用户公司的记录
翻译报表需要定义两个模板:
主要的报表模板、可翻译文档。
可以从可翻译文档中通过“t-lang”属性调用主翻译模板,(您可以使用属性t-lang从主模板调用可翻译文档,将其设置为语言代码(例如fr或en_US)或记录字段。如果你使用的字段是可翻译的(如国家名称,销售条件等),你还需要重新浏览相关记录与适当的上下文。))
Python专用指令
1:格式化纪录
t-field
只能用于格式化记录字段(从browe函数获取到的),可以根据字段类型自动匹配格式;t-options
只能用于自定义字段,最常用的是widget
,其他的选项都是field-xx
或widget-xx
2:在controller中渲染模版
0 1 |
response = http.request.render('模版名', {参数列表}) #会直接从controller里返回一个响应对象 |
3:在视图中渲染模版
在ir.ui.view:
中的render方法:
- render(cr, uid, id[, values][, engine='ir.qweb][, context])
通过view的数据库id来渲染一个qweb视图模板,模板在ir.ui.view
记录会自动加载,它会为渲染环境设置一系列默认值- request – 当前WebRequest对象
- debug – 当前请求是否是debug模式
- quote_plus – 是否进行url encode转义
- json – 相关的标准库
- time – 相关的标准库
- datetime – 相关的标准库
- relativedelta – model的时间处理属性
- keep_query – 一个keep_query函数,参数1:values-传递给qweb的上下文环境,参数2:engine (str) 用于qweb渲染的odoo模型名
参考:
https://blog.csdn.net/wangkun__/article/details/52683179
https://www.cnblogs.com/ygj0930/p/10826202.html
https://www.jianshu.com/p/695984c4aad2 (这个实战写得很好)
https://www.odoo.com/documentation/14.0/reference/qweb.html