如果你之前使用 Django 模板,你應該會發現跟 Jinja2 非常相似。實際上, 很多的語法元素看起來相同,工作也相同。
盡管如此, Jinja2 提供了更多的在之前文檔中描述的語法元素,并且某些 工作會有一點不一樣。
本節介紹了模板差異。由于 API 是從根本上不同,我們不會再這里贅述。
### 方法調用[](http://docs.jinkan.org/docs/jinja2/switching.html#id3 "Permalink to this headline")
在 Django 中,方法調用是隱式的。在 Jinja2 中,你必須指定你要調用一個對象。如 此,這段 Django 代碼:
~~~
{% for page in user.get_created_pages %}
...
{% endfor %}
~~~
在 Jinja 中應該是這樣:
~~~
{% for page in user.get_created_pages() %}
...
{% endfor %}
~~~
這允許你給函數傳遞變量,且宏也使用這種方式,而這在 Django 中是不可能的。
### 條件[](http://docs.jinkan.org/docs/jinja2/switching.html#id4 "Permalink to this headline")
在 Django 中你可以使用下面的結構來判斷是否相等:
~~~
{% ifequal foo "bar" %}
...
{% else %}
...
{% endifequal %}
~~~
在 Jinja2 中你可以像通常一樣使用 if 語句和操作符來做比較:
~~~
{% if foo == 'bar' %}
...
{% else %}
...
{% endif %}
~~~
你也可以在模板中使用多個 elif 分支:
~~~
{% if something %}
...
{% elif otherthing %}
...
{% elif foothing %}
...
{% else %}
...
{% endif %}
~~~
### 過濾器參數[](http://docs.jinkan.org/docs/jinja2/switching.html#id5 "Permalink to this headline")
Jinja2 為過濾器提供不止一個參數。參數傳遞的語法也是不同的。一個這樣的 Django 模板:
~~~
{{ items|join:", " }}
~~~
在 Jinja2 中是這樣:
~~~
{{ items|join(', ') }}
~~~
實際上這有點冗贅,但它允許不同類型的參數——包括變量——且不僅是一種。
### 測試[](http://docs.jinkan.org/docs/jinja2/switching.html#id6 "Permalink to this headline")
除過濾器外,同樣有用 is 操作符運行的測試。這里是一些例子:
~~~
{% if user.user_id is odd %}
{{ user.username|e }} is odd
{% else %}
hmm. {{ user.username|e }} looks pretty normal
{% endif %}
~~~
### 循環[](http://docs.jinkan.org/docs/jinja2/switching.html#id7 "Permalink to this headline")
因為循環與 Django 中的十分相似,僅有的不兼容是 Jinja2 中循環上下文的特殊變 量名為loop?而不是 Django 中的?forloop?。
### 周期計[](http://docs.jinkan.org/docs/jinja2/switching.html#id8 "Permalink to this headline")
Jinja 中沒有?{%?cycle?%}?標簽,因為它是隱式的性質。而你可以用循環對象 的?cycle?方法實現幾乎相同的東西。
下面的 Django 模板:
~~~
{% for user in users %}
<li class="{% cycle 'odd' 'even' %}">{{ user }}</li>
{% endfor %}
~~~
Jinja 中看起來是這樣:
~~~
{% for user in users %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ user }}</li>
{% endfor %}
~~~
沒有與?{%?cycle?...?as?variable?%}?等價的。
- 介紹
- 預備知識
- 安裝
- 基本 API 使用
- 實驗性的 Python 3 支持
- API
- 基礎
- Unicode
- 高層 API
- 自動轉義
- 標識符的說明
- 未定義類型
- 上下文
- 加載器
- 字節碼緩存
- 實用工具
- 異常
- 自定義過濾器
- 求值上下文
- 自定義測試
- 全局命名空間
- 低層 API
- 元 API
- 沙箱
- API
- 運算符攔截
- 模板設計者文檔
- 概要
- 變量
- 過濾器
- 測試
- 注釋
- 空白控制
- 轉義
- 行語句
- 模板繼承
- HTML 轉義
- 控制結構清單
- 導入上下文行為
- 表達式
- 內置過濾器清單
- 內置測試清單
- 全局函數清單
- 擴展
- 自動轉義擴展
- 擴展
- 添加擴展
- i18n 擴展
- 表達式語句
- 循環控制
- With 語句
- 自動轉義擴展
- 編寫擴展
- 集成
- Babel 集成
- Pylons
- TextMate
- Vim
- 從其它的模板引擎切換
- Jinja1
- Django
- Mako
- 提示和技巧
- Null-Master 退回
- 交替的行
- 高亮活動菜單項
- 訪問父級循環