Flask默認使用了jinja模板語言,jinja的設計文檔在這裏
jinja提供了一些方便的函數調用,例如常見的for、if…else。
例如:
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
if語句可以測試 一個變量是否未定義,爲空或 false。
一般的語法是
<do something> if <something is true> else <do something else>
其中else 部分是可選的,也可以用 elif 和 else 來構建多個分支
{% if kenny.sick %}
Kenny is sick.
{% elif kenny.dead %}
You killed Kenny! You bastard!!!
{% else %}
Kenny looks okay --- so far
{% endif %}
官方文檔給出的if用作內聯表達式的例子很有用,
{% extends layout_template if layout_template is defined else 'master.html' %}
這在一個變量定義的情況下才繼承一個模板,否則繼承默認的佈局模板。例如登錄前和登錄後繼承不同的模板,就可以這樣實現。
還可以這樣用:
{{ '[%s]' % page.title if page.title }}
這裏沒有顯式地提供 else 塊,會求值一個未定義對象
還可以用作循環過濾:
{% for user in users if not user.hidden %}
<li>{{ user.username|e }}</li>
{% endfor %}
另一個很有用的是過濾器,實際上也就是對變量進行操作的函數。
過濾器與變量用管道符號( | )分割,並且也 可以用圓括號傳遞可選參數。多個過濾器可以鏈式調用,前一個過濾器的輸出會被作爲 後一個過濾器的輸入。
例如:
{{ name|striptags|title }}
這句實際上會移除 name 中的所有 HTML 標籤並且改寫爲標題樣式的大小寫格式,具體是由兩個內置過濾器striptags和title實現的。可以在這裏查看所有的內置過濾器。
除了過濾器,還可以使用測試,用is
來測試變量或表達式,例如name is defined
用來測試name是否被定義過。內置的測試清單在這裏