jinja2 宏的簡單使用總結(macro)
阿新 • • 發佈:2017-05-30
編程語言 註意 jinja 框架 內部 word 簡介 href 空間
Table of Contents
- 1. 簡介
- 2. 用法
- 3. 參數和變量
- 4. 註意事項
- 4.1. macro的變量只能為如下三種:
- 4.2. 和block的關系:
- 5. 參考文檔
1 簡介
jinja2是python的模板引擎, 在寫python web使用的過程中,發現macro可以節省大量的代碼.所以做了一個小的總結.
用法基本上都是網上的文章. 自己主要是寫了註意事項,也算是心得體會.
2 用法
宏類似常規編程語言中的函數。它們用於把常用行為作為可重用的函數,取代 手動重復的工作。 例子:
{% macro input(name, value=‘‘, type=‘text‘, size=20) -%} <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}"> {%- endmacro %}
在命名空間中,宏之後可以像函數一樣調用:
<p>{{ input(‘username‘) }}</p> <p>{{ input(‘password‘, type=‘password‘) }}</p>
如果宏在不同的模板中定義,你需要首先使用 import
{% from ‘base/macro/submit.macro‘ import test %}
3 參數和變量
varargs 如果有多於宏接受的參數個數的位置參數被傳入,它們會作為列表的值保存在 varargs 變量上。 kwargs 同 varargs ,但只針對關鍵字參數。所有未使用的關鍵字參數會存儲在 這個特殊變量中。 caller 如果宏通過 call 標簽調用,調用者會作為可調用的宏被存儲在這個 變量中。 宏也可以暴露某些內部細節。下面的宏對象屬性是可用的: name 宏的名稱。 {{ input.name }} 會打印 input 。 arguments 一個宏接受的參數名的元組。 defaults 默認值的元組。 catch_kwargs 如果宏接受額外的關鍵字參數(也就是訪問特殊的 kwargs 變量),為 true 。 catch_varargs 如果宏接受額外的位置參數(也就是訪問特殊的 varargs 變量),為 true 。 caller 如果宏訪問特殊的 caller 變量且由 call 標簽調用,為 true 。
4 註意事項
4.1 macro的變量只能為如下三種:
- 參數變量
- module變量
- call 的變量
這個和其他的語言比如c語言的macro是很大的不同. 你在模塊中想讓macro引用自身的變量是不能實現的.
4.2 和block的關系:
macro的出現,本質是想解決重復代碼的問題. 和block相比,因為不能使用module中的參數,也就是說和block是 相輔相成的關系. 不存在互相覆蓋的問題.
macro 的重心在於替換簡單的重復性質的代碼.
block 的重心在於重復框架代碼的替換.
5 參考文檔
模板設計者文檔
內容來源:http://www.cnblogs.com/linuxhui/p/5804380.html
jinja2 宏的簡單使用總結(macro)