openerp所用QWEB2的调试笔记
【1】 调式qweb模板时, 可以脱离openerp环境
阅读一下openerp目录 qweb目录中的几个html文件,可以作为起步
在浏览器下, 可以这样运行这些文件
http://127.0.0.1:8069/web/static/lib/qweb/qweb-benchmark.html
http://127.0.0.1:8069/web/static/lib/qweb/qweb-test.js.html
【2】qweb模板的格式如果不符合xml规范, 浏览器显示空白, 浏览器的控制台中会显示如下提示
Uncaught Error: QWeb2: This page contains the following errors:error on line xxx at column yyy:
然后是具体的错误原因。比如
Opening and ending tag mismatch: aaa line nnn and bbb
Specification mandate value for attribute ccc
【3】在模板中增加如下指令, 可在浏览器的控制台上输出变量内容
〈t t-log="变量名称" />
当使用多个t-log时, 控制台中输出的变量内容会引起混淆, 这时可再增加如下语句
〈t t-log=" '变量名称的说明' " />
【4】在模板中增加如下指令, 可在qweb的编译模板过程中进入断点语句,
〈t t-debug="随便什么东东" />
这时, 我们可以在控制台的源码页签中看到编译的中间过程,
在控制台下, 使用console.log(dict) 可以看到传入的所有参数
使用console.log(r) 可以看到输出中间结果
官方文档上 介绍的使用方法 〈t t-debug /> ,如果后面不随便添加些什么东东, 会出现如下错误
Specification mandate value for attribute t-debug
【5】模板文件示例 (在qweb目录下, 文件名为 laoliu.xml)
如下是官网上web文档中的例子, 增加了t-log和t-debug语句
〈templates>
〈div t-name="example_template" t-attf-class="base #{cls}">
〈t t-log="'in example_template, value of [items]:'" />
〈t t-log="items" />
〈h4 t-if="title"> 〈t t-esc="title"/> 〈/h4>
〈ul>
〈li t-foreach="items" t-as="item" t-att-class="item_parity">
〈t t-call="example_template.sub">
〈t t-set="arg" t-value="item_value"/>
〈/t>
〈/li>
〈/ul>
〈t t-debug="随便什么东东" />
〈/div> 〈t t-name="example_template.sub">
〈t t-log="'in example_template.sub, value of [arg]:'" />
〈t t-log="arg" />
〈t t-esc="arg.name"/>
〈dl>
〈t t-foreach="arg.tags" t-as="tag" t-if="tag_index lt 5">
〈dt> 〈t t-esc="tag"/> 〈/dt>
〈dd> 〈t t-esc="tag_value"/> 〈/dd>
〈/t>
〈/dl>
〈/t>
〈/templates>
【6】 程序示例 (在qweb目录下, 文件名为 laoliu.html)
访问方法:http://127.0.0.1:8069/web/static/lib/qweb/laoliu.html
〈!doctype html>
〈html>
〈head>
〈script src="../jquery/jquery-1.8.3.js"> 〈/script>
〈script type="text/javascript" src="qweb2.js"> 〈/script>
〈script>
var laoliu_data={
"class1": "foo",
"title": "Random Title",
"items": [
{ "name": "foo", "tags": {"bar": "baz", "qux": "quux"} },
{ "name": "Lorem", "tags": {
"ipsum": "dolor",
"sit": "amet",
"consectetur": "adipiscing",
"elit": "Sed",
"hendrerit": "ullamcorper",
"ante": "id",
"vestibulum": "Lorem",
"ipsum": "dolor",
"sit": "amet"
}
}
]
}; QWeb = new QWeb2.Engine();
QWeb.debug = true;
QWeb.add_template('laoliu.xml');
template='laoliu.xml';
result=QWeb.render('example_template', laoliu_data );
$(document).ready(function () {
$('.placeholder').append(result);
});
〈/script> 〈/head>
〈body>
〈div class="placeholder">
〈/div>
〈/body>
〈/html>
【7】t-debug的运行结果
(function(dict
) { var context = { engine : this, template : 'example_template' };
dict = dict || {};
dict['__template__'] = 'example_template';
var r = [];
r.push(' 〈div');
r.push(context.engine.tools.gen_attribute(['class', ('base ' + (dict['cls']))]));
r.push('> ',
'n ');
console.log('in example_template, value of [items]:');
r.push('n ');
console.log(dict['items']);
r.push('n ');
if (dict['title']) {
r.push(' 〈h4> ');
r.push(context.engine.tools.html_escape(dict['title']));
r.push(' 〈/h4> ');
}
r.push('n 〈ul> ',
'n ');
context.engine.tools.foreach(context, dict['items'], 'item', dict, function(context, dict) {
r.push(' 〈li');
r.push(context.engine.tools.gen_attribute(['class', (dict['item_parity'])]));
r.push('> ',
'n ');
r.push(context.engine.tools.call(context, 'example_template.sub', dict, '', function(context, dict) {
var r = [];
r.push('n ');
dict['arg'] = (dict['item_value']);
r.push('n ');
return r.join('');
}));
r.push('n 〈/li> ');
});
r.push('n 〈/ul> ',
'n ');
debugger;
r.push('n 〈/div> '); return r.join('');
})
openerp所用QWEB2的调试笔记的更多相关文章
- Tomcat调试笔记
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...
- JavaScript特效(调试笔记)
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
- USB wifi调试笔记
本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
- modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)
最近的项目中使用到了欧姆龙的温控器,里面有很多的通信方式,我们使用的常见的modbus——RTU方式,其他方式我们不使用,其中通信手册上面有很多通信的实例,欧姆龙modbus还区分4字节模式和2字节模 ...
- GDB调试笔记
参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...
- 《C#并行编程高级教程》第7章 VS2010任务调试 笔记
没有什么好说的,主要是将调试模式下的Parallel Tasks窗体和Parallel Stacks窗体.折腾一下应该比看书效果好.(表示自己没有折腾过) 另外值得注意的是,主线程不是一个任务.所以主 ...
- SIM900A模块HTTP相关调试笔记
SIM900A模块使用笔记 更新2018-12-8 正常工作状态: 接线方法: 首先将 AT 写入字符串输入框,然后点击 发送.因为模块波特率默认是 9600,所以两条指令的显示都是没有问题的:如果将 ...
- 博世传感器调试笔记(一)----加速度传感器BMA253
公司是bosch的代理商,最近一段时间一直在公司开发的传感器demo板上调试bosch sensor器件.涉及到的器件有7,8款,类型包括重力加速度.地磁.陀螺仪.温度.湿度.大气压力传感器等.在调试 ...
随机推荐
- python 多进程并发与多线程并发
本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...
- 查询oracle数据库中当前数据库所有表的名称
http://www.cnblogs.com/hyq0002013/p/5948419.html select t.table_name from user_tables t;
- hdu5076
好题,首先观察可得w[i][j]选择只有可能两种,一种比阀值大,一种比阀值小 比阀值大就一定选满足条件最大的w,比阀值小同样一定选满足条件最大的w 那么一个最小割模型就呼之欲出了,注意w可能是负数那么 ...
- [libGDX游戏开发教程]使用libGDX进行游戏开发(1)-游戏设计
声明:<使用Libgdx进行游戏开发>是一个系列,文章的原文是<Learning Libgdx Game Development>,大家请周知.后续的文章连接在这里 使用Lib ...
- maven 通过 profile 设置多环境打包
maven 在设计之初就考虑到了业务代码和测试代码的分开存放.将业务代码默认存放在 src/main 下,将测试代码放在 src/test 下,然后在各自目录下再细分 java 与 res ...
- mysql:把DB1中A表a字段替换为DB2中B表b字段
UPDATE DB1.A SET a = ( SELECT b FROM DB2.B WHERE B.Id = A.id) 实例: UPDATE wordpress.`wp_posts` SET po ...
- System Center VMM请注意不同语言版本的差异
在私有云的项目中,经常需要判断System Center一些组件的连接是否OK. 我这里有开发,和测试两个环境,开发是英文版的System Center VMM,测试用的是中文版的System Cen ...
- 28、Django实战第28天:个人信息展示
从今天开始,我来完成个人中心部分,前端页面如下 1.浏览这些页面可以发现,它们和base.html是有区别的,因此,它们需要新建一个模板usercenter-base.html 2.把usercent ...
- CSS选择符——分门别类
CSS选择符--分门别类 有时候,老是会对一些CSS选择器模模糊糊,傻傻分不清.今天花了点时间整理了一下,感觉世界清静了不少. 用XMIND做出了思维导图: 主要有11中选择器:元素.类ID.后代.子 ...
- 免费Jdk选择:jdkadoptOpenJdk
oracle公司的jdk即将要收费,不在给免费用户提供更新,点击查看. jira在7.13版本将jdk从oracle jdk变更为adoptOpenJdk.点击查看.