在odoo開發(fā)里面仑濒,view都是使用qweb渲染的汽馋。那么對(duì)于前端的同學(xué)來(lái)說(shuō),他們希望是使用H5來(lái)做頁(yè)面粱年,那么odoo是如何實(shí)現(xiàn)的呢售滤?筆者查看了一下odoo的源碼,在addons里面的web模塊發(fā)現(xiàn)了答案台诗。
在addons/web/controllers/main.py里面完箩,有一個(gè)渲染數(shù)據(jù)庫(kù)模版頁(yè)面的方法
<pre>
<code>```def render_template(self, **kw)
pass
return env.get_template('database_manager.html').render()
</pre>
然后又在views里面發(fā)現(xiàn)了database_manager.html頁(yè)面
![web](http://upload-images.jianshu.io/upload_images/143568-b079b994f9c8c034.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- - -
經(jīng)過(guò)一番搗鼓,總結(jié)出以下步驟:
<i><b>注意</b>:我是自定義的模塊拉队,繼承project開發(fā)</i><ol>
<li>在views里面新增一個(gè)頁(yè)面:
![list_project](http://upload-images.jianshu.io/upload_images/143568-469bf4cdf672f822.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</li>
<li>在controller里面添加一個(gè)方法:list_project
調(diào)用get_template()方法弊知,該方法傳入一個(gè)靜態(tài)資源的字符串參數(shù),只要該模塊被注冊(cè)了粱快,那么會(huì)自動(dòng)找到該資源
后面鏈?zhǔn)秸{(diào)用render()方法秩彤,是渲染該頁(yè)面,可以將需要傳到頁(yè)面的參數(shù)放到里面事哭,該參數(shù)類型為字典類型
<pre>
<code>```@http.route('/tm/tm/listProject/', auth='public')
def list_project(self, **kw):
projects = http.request.env['project.project'].search([])
return env.get_template('list_project.html').render({'projects': projects})
</pre>```</code>
</li>
<li>定義env
這里需要注意的是jinja2.PackgeLoader()該方法漫雷,需要修改對(duì)應(yīng)注冊(cè)的模塊名字,如我自定義的模塊為odoo.addons.tm, 第二個(gè)參數(shù)是你靜態(tài)資源存放的位置鳍咱,這樣就不需要在__manifest__.py清單文件添加data數(shù)據(jù)(沒(méi)試過(guò)將*.html添加到data該做法)
<pre>
<code>```import jinja2
import json
import os
import sys
if hasattr(sys, 'frozen'):
# When running on compiled windows binary, we don't have access to package loader.
path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'views'))
loader = jinja2.FileSystemLoader(path)
else:
loader = jinja2.PackageLoader('odoo.addons.tm', "views")```</code>
</pre>
</li>
<li>編輯list_project.html
<pre>
<code>```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的項(xiàng)目</title>
</head>
<body>
{% if projects %}
{% for project in projects %}
<a href="/tm/tm/detail/{{ project.id }}">{{project.name}}</a><br>
{{project.desc}}<br>
<img src="data:image/gif;base64,{{ project.pic }}"/>
{% endfor %}
{% endif %}
</body>
</html>```</code>
</pre>
</li>
<li>重啟odoo服務(wù)器降盹,update 模塊, 在瀏覽器輸出localhost:8069/tm/tm/listProject,效果見(jiàn)下圖:
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/143568-d7e8f706e378bda7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</li>
</ol>
GOOD LUCK!