17 如何使用Qweb开发一个页面
odoo 注重敏捷,但是同时也带来的问题我就是不够灵活,如果有一天你的boss让你做一个工作台,将其他模型的数据进行统计,并使用图表的形式进行展示。 这时候该如何做呢?
很明显 odoo 提供的视图时没有办法满足我们的需求的,这个时候 使用qweb注册一个页面就很有必要了。
首先开发之前你需要了解一些知识 【Qweb语法传送】
1 使用Qweb生成一个你想要的html界面(static/src/xml/epidemic_tongji_page.xml)
<?xml version="1.0" encoding="UTF-8"?>
<template>
<t t-name="EpidemicTongjiPage">
<div>这是一个测试页面</div>
</t>
</template>
2 对AbstractAction模块进行扩展,得到自己的Widget并且使用web.core对我们的Widget进行注册,实现格式如下:(static/src/js/epidemic_tongji_page.js)
odoo.define('Epidemic_tongji.tongji_page', function(require) {
"use strict";
var AbstractAction = require('web.AbstractAction');
var core = require('web.core');
// 模块扩展
var TongjiPage = AbstractAction.extend({
template: 'EpidemicTongjiPage',
......
});
// 对TongjiPage进行注册,通过映射绑定动作
core.action_registry.add('tag.tongji.page', TongjiPage);
});
3 注册完成之后,需要新增一个客户端动作来绑定我们自己的界面实现动作的调整,其中动作的tag属性此时需要设置为新增widget的映射值:(tag属性非常重要,必须和映射值保持一致)(views/epidemic_tongji_page_view.xml)
<record id="epidemic_tongji_page_action" model="ir.actions.client">
<field name="name">TongjiPagee</field>
<field name="tag">'tag.tongji.page</field>
</record>
4 此时我们新建一个菜单项目,并且其 action属性指定到客户端动作来实现页面跳转(views/menu_views.xml):
<!-- Top menu item -->
<menuitem name="统计页面"
id="epidemic_tongji_page_menu_root"
action="epidemic_tongji_page_action"
sequence="99"
/>
5 现在我们基本实现了自定义的界面开发,最后需要将静态资源进行加载:
js文件我们需要使用资产捆绑(views/templates.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="epidemic_tongji.assets_backend" inherit_id="web.assets_backend" name="epidemic_tongji.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/epidemic_tongji/static/src/js/epidemic_tongji_page.js"/>
</xpath>
</template>
</odoo>
清单关联文件中:
'qweb': ['static/src/xml/epidemic_tongji_page']
'data': ['views/epidemic_tongji_page_view.xml',
'views/templates.xml',
'views/menu_views.xml']
最后 重启、更新模块,你会发现页面已经加载好了
浙公网安备 33010602011771号