“在报表中展示数据”的版本间的差异
2355481564(讨论 | 贡献) |
2355481564(讨论 | 贡献) |
||
(未显示同一用户的1个中间版本) | |||
第15行: | 第15行: | ||
现在我们可以开始为报表设计页面内容了: | 现在我们可以开始为报表设计页面内容了: | ||
<nowiki> | <nowiki> | ||
− | + | <!-- Report page content | |
<div class="row bg-primary"> | <div class="row bg-primary"> | ||
<div class="col-xs-3"> | <div class="col-xs-3"> | ||
第31行: | 第31行: | ||
</div> | </div> | ||
</t></nowiki> | </t></nowiki> | ||
+ | |||
+ | 内容的布局可以使用Twitter的Bootstrap HTML网格系统。简单来说,Bootstrap有一个包含12个列的网格布局。可以使用<nowiki><div class="row"></nowiki>添加一个新行。在一行中,我们有单元格,每个单元格都有确定数字,最大为12。每个单元可以定义为<nowiki><div class="col-xs-N "></nowiki>,其中N为它跨越列的数目。 | ||
+ | |||
+ | 提示 | ||
+ | |||
+ | 关于Bootstrap的详细介绍,请参见网址:http://getbootstrap.com | ||
+ | |||
+ | 这里我们添加标题行,然后是t-foreach 循环,遍历每个记录,并为每个记录呈现一行。 | ||
+ | |||
+ | 由于呈现是服务器端完成的,所以记录是对象,我们可以使用点符号(.)访问相关数据记录对应的字段。这让我们很容易通过关系字段访问它们的数据。注意,客户端渲染的Qweb,视图,是不可以这样访问的,如web客户端看板视图。 | ||
+ | |||
+ | 下面是一条记录行的XML示例: | ||
+ | <nowiki> | ||
+ | <div class="col-xs-3"> | ||
+ | <h4><span t-field="o.name" /></h4> | ||
+ | </div> | ||
+ | <div class="col-xs-2"> | ||
+ | <span t-field="o.user_id" /> | ||
+ | </div> | ||
+ | <div class="col-xs-1"> | ||
+ | <span t-field="o.date_deadline" /> | ||
+ | <span t-field="o.amount_cost" | ||
+ | t-field-options='{ | ||
+ | "widget": "monetary", | ||
+ | "display_currency": "o.currency_id"}'/> | ||
+ | </div> | ||
+ | <div class="col-xs-3"> | ||
+ | <div t-field="res_company.partner_id" | ||
+ | t-field-options='{ | ||
+ | "widget": "contact", | ||
+ | "fields": ["address", "name", "phone", "fax"], | ||
+ | "no_marker": true}' /> | ||
+ | </div> | ||
+ | <div class="col-xs-3"> | ||
+ | <!-- Render followers --> | ||
+ | </div> | ||
+ | </nowiki> | ||
+ | |||
+ | 如我们所见,字段可用于附加选项。这些都是非常类似于表单视图的optionss属性,就像第六章 视图—设计用户界面中,使用了一个附加的widget属性去设置一个渲染字段的小部件。 | ||
+ | |||
+ | 上面那个例子中,第一个部件就是在截止日期之后使用了一个货币小部件。 | ||
+ | |||
+ | 第二个更复杂的例子是用于格式化地址的小部件(contact)。我们使用公司地址作为演示,res_company.partner_id,是因为它有一些默认数据,我们可以立即看到渲染的效果。它也适用于用户地址,o.user_id.partner_id。默认情况下, 地址部件(contact)将显示带有一些象形文字的地址,比如手机图标。可以用no_marker="true" 选项可以将它们禁用。 |
2018年1月5日 (五) 09:37的最新版本
不同于看板视图,报表中的QWeb模板是被服务器端用Python解析QWeb后渲染的。我们可以看到这两个完成了相同的规范,但有一些差异我们需要注意的。
首先,QWeb表达式是使用Python语法解析的,不是JavaScript。最简单的表达式,有很少或根本没有区别,但更复杂的操作可能会不同。
表达式的解析方式也是不同的。报表中,我们有以下变量:
·docs 是迭代器,包含所有待打印的数据集 ·doc_ids 是一个包含所有待打印数据集ID的列表 ·doc_model 是数据集关联的模块标识,如todo.task ·time 是Python时间库的引用 ·user 是运行报表的用户的数据记录 ·res_company 是当前用户的公司的数据记录
报表内容是用HTML编写的,字段值可以使用t-field属性来引用,t-field-options属性可以使用特定的小部件来呈现字段内容。
现在我们可以开始为报表设计页面内容了:
<!-- Report page content <div class="row bg-primary"> <div class="col-xs-3"> <span class="glyphicon glyphicon-pushpin" /> What </div> <div class="col-xs-2">Who</div> <div class="col-xs-1">When</div> <div class="col-xs-3">Where</div> <div class="col-xs-3">Watchers</div> </div> <t t-foreach="docs" t-as="o"> <div class="row"> <!-- Data Row Content --> </div> </t>
内容的布局可以使用Twitter的Bootstrap HTML网格系统。简单来说,Bootstrap有一个包含12个列的网格布局。可以使用<div class="row">添加一个新行。在一行中,我们有单元格,每个单元格都有确定数字,最大为12。每个单元可以定义为<div class="col-xs-N ">,其中N为它跨越列的数目。
提示
关于Bootstrap的详细介绍,请参见网址:http://getbootstrap.com
这里我们添加标题行,然后是t-foreach 循环,遍历每个记录,并为每个记录呈现一行。
由于呈现是服务器端完成的,所以记录是对象,我们可以使用点符号(.)访问相关数据记录对应的字段。这让我们很容易通过关系字段访问它们的数据。注意,客户端渲染的Qweb,视图,是不可以这样访问的,如web客户端看板视图。
下面是一条记录行的XML示例:
<div class="col-xs-3"> <h4><span t-field="o.name" /></h4> </div> <div class="col-xs-2"> <span t-field="o.user_id" /> </div> <div class="col-xs-1"> <span t-field="o.date_deadline" /> <span t-field="o.amount_cost" t-field-options='{ "widget": "monetary", "display_currency": "o.currency_id"}'/> </div> <div class="col-xs-3"> <div t-field="res_company.partner_id" t-field-options='{ "widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true}' /> </div> <div class="col-xs-3"> <!-- Render followers --> </div>
如我们所见,字段可用于附加选项。这些都是非常类似于表单视图的optionss属性,就像第六章 视图—设计用户界面中,使用了一个附加的widget属性去设置一个渲染字段的小部件。
上面那个例子中,第一个部件就是在截止日期之后使用了一个货币小部件。
第二个更复杂的例子是用于格式化地址的小部件(contact)。我们使用公司地址作为演示,res_company.partner_id,是因为它有一些默认数据,我们可以立即看到渲染的效果。它也适用于用户地址,o.user_id.partner_id。默认情况下, 地址部件(contact)将显示带有一些象形文字的地址,比如手机图标。可以用no_marker="true" 选项可以将它们禁用。