W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如果你之前使用 Django 模板,你應(yīng)該會發(fā)現(xiàn)跟 Jinja2 非常相似。實際上, 很多的語法元素看起來相同,工作也相同。
盡管如此, Jinja2 提供了更多的在之前文檔中描述的語法元素,并且某些 工作會有一點不一樣。
本節(jié)介紹了模板差異。由于 API 是從根本上不同,我們不會再這里贅述。
在 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 %}
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)與 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?%}?等價的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: