1. 程式人生 > >jinja2 宏的簡單使用總結(macro)

jinja2 宏的簡單使用總結(macro)

編程語言 註意 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的變量只能為如下三種:

  1. 參數變量
  2. module變量
  3. call 的變量

這個和其他的語言比如c語言的macro是很大的不同. 你在模塊中想讓macro引用自身的變量是不能實現的.

4.2 和block的關系:

macro的出現,本質是想解決重復代碼的問題. 和block相比,因為不能使用module中的參數,也就是說和block是 相輔相成的關系. 不存在互相覆蓋的問題.

macro 的重心在於替換簡單的重復性質的代碼.

block 的重心在於重復框架代碼的替換.

5 參考文檔

模板設計者文檔

內容來源:http://www.cnblogs.com/linuxhui/p/5804380.html

jinja2 宏的簡單使用總結(macro)