odoo訪問靜態(tài)資源方法

在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頁面
![web](http://upload-images.jianshu.io/upload_images/143568-b079b994f9c8c034.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- - -
經(jīng)過一番搗鼓,總結(jié)出以下步驟:
<i><b>注意</b>:我是自定義的模塊,繼承project開發(fā)</i><ol>
<li>在views里面新增一個頁面:
![list_project](http://upload-images.jianshu.io/upload_images/143568-469bf4cdf672f822.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
</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,效果見下圖:
![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!



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 創(chuàng)建第一個odoo 應(yīng)用 Odoo遵循傳統(tǒng)的MVC模式。我們可以通過創(chuàng)建簡單的To-Do 應(yīng)用來具體介紹分析 mo...
    F4A3閱讀 1,458評論 0 5
  • =========================================================...
    lavor閱讀 3,505評論 0 5
  • 介紹 Jinja是基于python的模板引擎,功能比較類似于于PHP的smarty,J2ee的Freemarker...
    ZhouLang閱讀 7,967評論 0 2
  • “你好嗎?我很好”電影《情書》中博子在雪山邊向逝去的藤井樹呼喊的場景,是每一個巖井俊二影迷心中難忘的經(jīng)典。有時候,...
    木木木木SAMA閱讀 387評論 0 2
  • 感覺到學(xué)校后情緒還算正常,焦慮還是有的,關(guān)鍵是感覺很不錯,沒什么壓力。作業(yè)不用交。今天還溜狗去了。
    荷塘魚閱讀 93評論 0 0