odoo10學習筆記八:qweb引擎
原文地址:http://www.cnblogs.com/ygj0930/p/7149497.htmljavascript
一:簡介css
QWeb是一個基於xml的模板引擎,用於生成HTML片斷和頁面,模板指令是寫在xml標籤中的以t-開頭的屬性,好比t-if
若是要讓一個標籤不被渲染,能夠採用t來包裹,這樣會執行它裏面的命令可是不產生任何輸出。【從這一點看,相似於jsp。】html
template
建立一個QWeb視圖,只須要一個arch元素幷包含如下的屬性:前端
- id -- 視圖的id
- name, inherit_id, priority 與ir.ui.view的一致
- primary -- 設置爲True並與inherit_id一塊兒使用時,設置爲主視圖
- groups -- 以逗號分隔的分組id
- page -- 設置爲True時,該頁面爲網頁
- optional -- enabled 或 disabled,在用戶界面中是否能夠被禁用,默認是能夠禁用
二:XML標籤java
1:輸出內容jquery
<p><t t-esc="要顯示的內容"/></p>
2:條件語句:t-if屬性值爲True時,輸出t標籤包含內容git
<div>
<t t-if="condition">
<p>ok</p>
</t>
</div>
#當condition是true的時候解析成:
<div>
<p>ok</p>
</div>
#condition爲false的時候解析成
<div>
</div>
還有t-elif/t-else:程序員
<div>
<p t-if="user.birthday == today()">Happy bithday!</p>
<p t-elif="user.login == 'root'">Welcome master!</p>
<p t-else="">Welcome!</p>
</div>
3:循環web
t-foreach用來指定須要循環處理的數據,t-as提供的是在後面用於表明當前項目的變量名。數據庫
<t t-foreach="[1, 2, 3]" t-as="i">
<p><t t-esc="i"/></p>
</t>
#上述語句輸出:
<p>1</p>
<p>2</p>
<p>3</p>
4:屬性
qweb能夠對屬性進行實時計算並在輸出時設置,經過t-attr來實現,有三種形式:
1)t-att-屬性名
能夠根據屬性名建立一個屬性:
<div t-att-a="42"/> //建立屬性a,屬性值爲42
#輸出
<div a="42"></div>
屬性值也能夠爲一個 格式化字符串,能夠在運行期間肯定具體值,做爲屬性值
<li t-attf-class="row {{ item_parity }}">//item_parity在運行時肯定值
2)t-att=mapping
若是參數是映射表,每一個鍵值對會生成一個屬性:
<div t-att="{'a': 1, 'b': 2}"/>
#輸出
<div a="1" b="2"></div>
3)t-att=pair
若是參數是元組或2個元素的數組,那麼第一個項就做爲屬性名,第二個做爲屬性值:
<div t-att="['a', 'b']"/>
#輸出
<div a="b"></div>
5:設置變量
使用t-set屬性來實現變量聲明,它的值就是設置的變量名。而後用t-value屬性的屬性值做爲新變量的值。
<t t-set="foo" t-value="2 + 1"/>
<t t-esc="foo"/>
#輸出3
6:調用子模板
<t t-call="other-template"/>會調用指定名字的模板
三:Python專用指令
1:格式化紀錄
t-field
只能用於格式化記錄字段(從browe函數獲取到的),能夠根據字段類型自動匹配格式;t-options
只能用於自定義字段,最經常使用的是widget
,其餘的選項都是field-xx
或widget-xx
2:在controller中渲染模版
response = http.request.render('my-template', {
'context_value': 42
})
#會直接從controller裏返回一個響應對象
3:在視圖中渲染模版
在ir.ui.view:
中的render方法:
- render(cr, uid, id[, values][, engine='ir.qweb][, context])
經過view的數據庫id來渲染一個qweb視圖模板,模板在ir.ui.view
記錄會自動加載,它會爲渲染環境設置一系列默認值- request - 當前WebRequest對象
- debug - 當前請求是不是debug模式
- quote_plus - 是否進行url encode轉義
- json - 相關的標準庫
- time - 相關的標準庫
- datetime - 相關的標準庫
- relativedelta - model的時間處理屬性
- keep_query - 一個keep_query函數,參數1:values-傳遞給qweb的上下文環境,參數2:engine (str) 用於qweb渲染的odoo模型名
四:JS專用指令
1:定義模板
<templates>
<t t-name="template-name">
<!-- template code -->
</t>
</templates>
2:繼承模板
模板繼承是用來修改已存在的模板,即給在其餘模塊定義的模板添加內容。
經過t-extend
來表示,它的值是被繼承的模板名,經過t-jquery來進行修改。
<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>
t-jquery
是一個css選擇器,用於選擇須要改變的節點,並經過t-operation
指定須要進行的操做
- append - 新節點的內容添加到原節點的後面(最後一個子節點後)
- prepend - 新節點內容添加到原節點前面(第一個子節點前)
- before - 新節點內容添加到原節點前
- after - 新節點內容添加到原節點後
- inner - 新節點內容替換原節點的子節點replace - 新節點內容直接替換原節點
- 若是沒有指定operation,那麼模板內容會被解析成javascript節點,並將context節點設置爲this
五:調試指令
1:t-log
<t t-log="打印信息"/>
2:斷點調試t-debug
<t t-if="condition">
<t t-debug="">
</t>
3:t-js
該節點內容裏的javascript代碼會在渲染時執行,接收一個context參數,將當前的環境傳給js,從而可使用context.XX調用上下文中的內容。
<t t-js="ctx">
console.log("var is", ctx.var);
</t>
【前端】SpreadJS表格控件,可嵌入系統開發的在線Excel
【推薦】碼雲企業版,高效的企業級軟件協做開發管理平臺
【推薦】程序員問答平臺,解決您開發中遇到的技術難題
· odoo官方文檔第十章QWEB
· OpenERP QWeb模板標籤筆記
· odoo10學習筆記十三:qweb報表
· odoo中的QWeb模板引擎
· OpenERP QWeb模板標籤筆記
· 華爲胡厚崑:鴻蒙系統沒推出時間表 華爲是安卓堅決支持者
· 美國小型電信運營商與諾基亞愛立信討論替換華爲設備
· OPPO展現兩大"黑科技":屏下攝像頭和無網絡通訊
· 華爲被禁國內手機銷量大增 胡厚崑感謝國民的情感支持
· 採用透視全景屏 OPPO屏下攝像頭手機發布
» 更多新聞...