转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826202.html

一:简介

QWeb是一个基于xml的模板引擎,用于生成HTML片段和页面。

模板指令是写在xml标签中,以t-开头。

二:template标签

创建一个QWeb视图,只需要一个arch元素并包含以下的属性:

  • id -- 视图的id
  • name, inherit_id, priority 与ir.ui.view的一致
  • primary -- 设置为True并与inherit_id一起使用时,设置为主视图
  • groups -- 以逗号分隔的分组id
  • page -- 设置为True时,该页面为网页
  • optional -- enabled 或 disabled,在用户界面中是否可以被禁用,默认是可以禁用

三:Qweb语法

1:输出内容

<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:

<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提供的是在后面用于代表当前项目的变量名。

<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:调用其他qweb模板

<t t-call="other-template"/>//调用指定名字的模板

四:Python专用指令

1:格式化纪录

  • t-field只能用于格式化记录字段(从browe函数获取到的),可以根据字段类型自动匹配格式
  • t-options只能用于自定义字段,最常用的是widget,其他的选项都是field-xxwidget-xx

2:在controller中渲染模版

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模型名

五:JS专用指令

1:定义模板

<templates>
<t t-name="template-name">
<!-- template code -->
</t>
</templates>

2:继承模板

模板继承是用来修改已存在的模板,即给在其他模块定义的模板添加内容。

通过t-extend来表示,它的值是被继承的模板名,通过t-jquery来定位,通过t-operation来指定修改的位置/方式。

<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>

t-jquery是一个css选择器,用于选择需要改变的节点,并通过t-operation指定需要进行的操作

    • append - 新节点的内容添加到原节点的后面(最后一个子节点后)
    • prepend - 新节点内容添加到原节点前面(第一个子节点前)
    • before - 新节点内容添加到原节点前
    • after - 新节点内容添加到原节点后
    • inner - 新节点内容替换原节点的子节点
    • replace - 新节点内容直接替换原节点
    • 如果没有指定operation,那么模板内容会被解析成javascript节点,并将context节点设置为this

六:调试指令

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>

Odoo Qweb语法的更多相关文章

  1. odoo Q-web

    文档链接于:https://www.odoo.com/documentation/8.0/reference/qweb.html QWeb is the primary templating engi ...

  2. Odoo QWeb

    1.web 模块 注意,OpenERP 模块中 web 部分用到的所有文件必须被放置在模块内的 static 文件夹里.这是强制性的,出于安全考虑. 事实上,我们创建的文件夹 CSS,JS 和 XML ...

  3. Odoo Qweb报表css丢失问题

    有时候我们恢复过来的数据库在打印原来系统的Qweb报表的时候会发现所有的样式都丢失了,只打印内容出来. 这时候我们可以进入Setting/ Technical / Paramters / System ...

  4. odoo qweb 记录

    默认的打印功能修改,比如在动作中的打印功能: 继承抽象模型 models.AbstractModel 重写 _get_report_values class PayslipDetailsReportI ...

  5. Odoo中的模型继承、视图继承、Qweb模板继承详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826114.html 在实际开发过程中,经常会遇到需要修改Odoo原生逻辑的情况.然而,直接修改Odoo底 ...

  6. 第十一章 Odoo 12开发之看板视图和用户端 QWeb

    QWeb 是 Odoo 使用的模板引擎,它基于 XML 来生成 HTML 片断和页面.通过 QWeb可生成内容丰富的看板(Kankan)视图.报表和 CMS 网页.本文中我们将学习QWeb 语法以及如 ...

  7. 48.Odoo产品分析 (五) – 定制板块(3) – 修改文件和报告(1)

    查看Odoo产品分析系列--目录 不管ERP系统中的内置报表有多完善,大多数的公司仍然需要对文档和报表进行一些自定义的修改.  这一章节将介绍如何对报表的页眉和页脚做自定义修改:odoo框架如何组织报 ...

  8. Odoo中的五种Action详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826232.html Odoo中的五种action都是继承自ir.actions.actions模型实现的 ...

  9. 第四章 Odoo 12 开发之模块继承

    Odoo 的一个强大功能是无需直接修改底层对象就可以添加功能.这是通过其继承机制来实现的,采取在已有对象之上修改层来完成.这种修改可以在不同层上进行-模型层.视图层和业务逻辑层.我们创建新的模块来做出 ...

随机推荐

  1. SpringBoot简介以及案例

    1什么是SpringBoot Spring Boot 是所有基于 Spring 开发的项目的起点.Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置 ...

  2. kali 触摸板手势之fusuma

    1.执行如下命令进行安装 *fusuma 需要在ruby环境下运行,若计算机不支持ruby,则先执行:apt-get install ruby apt-get update apt-get insta ...

  3. ThreadPoolExecutor源码1

    参考:https://www.cnblogs.com/liuyun1995/p/9305273.html ThreadPoolExecutor1 executorService1 = new Thre ...

  4. QFIL软件烧写镜像

    1.准备好需要烧写的文件 烧写之前,需要先准备好需要的文件,如下: 2.打开QFIL程序 接下来运行QFIL程序,如下: 3.选择端口 程序运行后,选择合适的端口,如下: 点击端口选择,然后选择Por ...

  5. 鼠标滚轮滚动慢/拖动Office出现滞后问题处理

    一.说明 我对外设一直不是很了解,买的鼠标今天到了,使用时遇到了两个问题在这里记一下. 二.滚轮滚动慢处理 问题描述:在网页中滚动滚轮每次只能上下移动一点点,感觉很难受. 问题原因:此问题是滚轮滚动一 ...

  6. Linux平台上常用到的c语言开发程序

    Linux操作系统上大部分应用程序都是基于C语言开发的.小编将简单介绍Linux平台上常用的C语言开发程序. 一.C程序的结构1.函数 必须有一个且只能有一个主函数main(),主函数的名为main. ...

  7. mysql获取某个字段平均值方法AVG函数的使用

    直接上脚本 ,)) AS 平均分 FROM students WHERE sex= '男' 其中,特别说明一下CAST关键字 CAST(字段名 as 要转换的类型) #其中,可以转换的类型为: CHA ...

  8. HTML+CSS综合练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Vue3.0结合bootstrap做多页面应用(1)创建项目

    本人主要做c# winform应用,刚接触vue,发现用vue做单页面应用的比较多,多页面的资料很少,特别是用vue3.0版本做多页面的资料,更少,所以自己整理一下,结合bootstrap和jquer ...

  10. c# mvc webapi的put报405错误

    程序在本机调试可正常修改,本机是iis11 放到服务器上,报错了:405.服务器iis7.0 返回的错误页面: <!DOCTYPE html PUBLIC "-//W3C//DTD X ...