odoo10学习笔记八:qweb引擎
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189307.html
一:简介
QWeb是一个基于xml的模板引擎,用于生成HTML片段和页面,模板指令是写在xml标签中的以t-开头的属性,比如t-if
如果要让一个标签不被渲染,可以采用t来包裹,这样会执行它里面的命令但是不产生任何输出。【从这一点看,类似于jsp。】
template
创建一个QWeb视图,只需要一个arch元素并包含以下的属性:
- id -- 视图的id
- name, inherit_id, priority 与ir.ui.view的一致
- primary -- 设置为True并与inherit_id一起使用时,设置为主视图
- groups -- 以逗号分隔的分组id
- page -- 设置为True时,该页面为网页
- optional -- enabled 或 disabled,在用户界面中是否可以被禁用,默认是可以禁用
二:XML标签
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:调用子模板
<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方法:
- 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 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>
odoo10学习笔记八:qweb引擎的更多相关文章
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- Apache OFBiz 学习笔记 之 服务引擎 二
加载服务定义文件 ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中 加载服务定义 例:framework/common/ofbi ...
- ROS学习笔记八:基于Qt搭建ROS开发环境
1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...
随机推荐
- 『008』Zabbix
『006』索引-Monitoring Zabbix [001]- 点我快速打开文章[001-Zabbix 服务安装] [002]- 点我快速打开文章[002-Zabbix 前端配置] 更新中
- HTML&CSS基础-子元素和后代元素选择器
HTML&CSS基础-子元素和后代元素选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html ...
- 2019 Multi-University Training Contest 1 String(序列自动机+贪心)
题意 链接:https://vjudge.net/problem/HDU-6586 给你一个字符串和k,还有每个字符出现次数的限制,求一个长度为k的字典序最小的满足限制的子序列. 思路 先构造出序列自 ...
- LINUX下查看点云图————point cloud(.ply .vtk .pcd)
首先,你要确定点云的格式:.pcd(.vtk) 还是 .ply 如果是.pcd(.vtk),那么可以用pcl工具查看: 1.安装pcl,官网链接点击打开链接 sudo add-apt-reposito ...
- vue better-scroll
better-scroll在vue项目中的使用 2017年12月21日 18:01:09 阅读数:411 1.准备工作 在项目中安装better-scroll: npm install --save ...
- ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程
前言 鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级 我就写一写这系列的文章 注意:首先大家必须把我自建服务器是如何实现的看明白! 我看了下阿里云提供的,实际上流程和咱自建实现的差别不大 ...
- android shape图形优化Button效果
android shape可以让我们通过定义xml文件的方式创建图形,当然只能实现一些比较简单的图形(圆形,矩形,椭圆,线段),但是已经相当不错了,通过shape创建的图形作为控件的背景已经基本可以满 ...
- 【Java语言特性学习之四】常用集合
java中常见的数据结构
- golang基础之初识
golang 简介 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的 ...
- LeetCode 1293. Shortest Path in a Grid with Obstacles Elimination
题目 非常简单的BFS 暴搜 struct Node { int x; int y; int k; int ans; Node(){} Node(int x,int y,int k,int ans) ...