在odoo開發(fā)里面,view都是使用qweb渲染的。那么對于前端的同學(xué)來說,他們希望是使用H5來做頁面,那么odoo是如何實現(xiàn)的呢?筆者查看了一下odoo的源碼,在addons里面的web模塊發(fā)現(xiàn)了答案。
在addons/web/controllers/main.py里面,有一個渲染數(shù)據(jù)庫模版頁面的方法
<pre>
<code>```def render_template(self, **kw)
pass
return env.get_template('database_manager.html').render()
</pre>
然后又在views里面發(fā)現(xiàn)了database_manager.html頁面

- - -
經(jīng)過一番搗鼓,總結(jié)出以下步驟:
<i><b>注意</b>:我是自定義的模塊,繼承project開發(fā)</i><ol>
<li>在views里面新增一個頁面:

</li>
<li>在controller里面添加一個方法:list_project
調(diào)用get_template()方法,該方法傳入一個靜態(tài)資源的字符串參數(shù),只要該模塊被注冊了,那么會自動找到該資源
后面鏈?zhǔn)秸{(diào)用render()方法,是渲染該頁面,可以將需要傳到頁面的參數(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()該方法,需要修改對應(yīng)注冊的模塊名字,如我自定義的模塊為odoo.addons.tm, 第二個參數(shù)是你靜態(tài)資源存放的位置,這樣就不需要在__manifest__.py清單文件添加data數(shù)據(jù)(沒試過將*.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>我的項目</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,效果見下圖:

</li>
</ol>
GOOD LUCK!