Django

2018-02-24 15:39 更新

如果你之前使用 Django 模板,你應(yīng)該會發(fā)現(xiàn)跟 Jinja2 非常相似。實際上, 很多的語法元素看起來相同,工作也相同。

盡管如此, Jinja2 提供了更多的在之前文檔中描述的語法元素,并且某些 工作會有一點不一樣。

本節(jié)介紹了模板差異。由于 API 是從根本上不同,我們不會再這里贅述。

方法調(diào)用

在 Django 中,方法調(diào)用是隱式的。在 Jinja2 中,你必須指定你要調(diào)用一個對象。如 此,這段 Django 代碼:

{% for page in user.get_created_pages %}
    ...
{% endfor %}

在 Jinja 中應(yīng)該是這樣:

{% for page in user.get_created_pages() %}
    ...
{% endfor %}

這允許你給函數(shù)傳遞變量,且宏也使用這種方式,而這在 Django 中是不可能的。

條件

在 Django 中你可以使用下面的結(jié)構(gòu)來判斷是否相等:

{% ifequal foo "bar" %}
    ...
{% else %}
    ...
{% endifequal %}

在 Jinja2 中你可以像通常一樣使用 if 語句和操作符來做比較:

{% if foo == 'bar' %}
    ...
{% else %}
    ...
{% endif %}

你也可以在模板中使用多個 elif 分支:

{% if something %}
    ...
{% elif otherthing %}
    ...
{% elif foothing %}
    ...
{% else %}
    ...
{% endif %}

過濾器參數(shù)

Jinja2 為過濾器提供不止一個參數(shù)。參數(shù)傳遞的語法也是不同的。一個這樣的 Django 模板:

{{ items|join:", " }}

在 Jinja2 中是這樣:

{{ items|join(', ') }}

實際上這有點冗贅,但它允許不同類型的參數(shù)——包括變量——且不僅是一種。

測試

除過濾器外,同樣有用 is 操作符運行的測試。這里是一些例子:

{% if user.user_id is odd %}
    {{ user.username|e }} is odd
{% else %}
    hmm. {{ user.username|e }} looks pretty normal
{% endif %}

循環(huán)

因為循環(huán)與 Django 中的十分相似,僅有的不兼容是 Jinja2 中循環(huán)上下文的特殊變 量名為loop?而不是 Django 中的?forloop?。

周期計

Jinja 中沒有?{%?cycle?%}?標(biāo)簽,因為它是隱式的性質(zhì)。而你可以用循環(huán)對象 的?cycle?方法實現(xiàn)幾乎相同的東西。

下面的 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?%}?等價的。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號