Jinja模板使用

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是否被定義過。內置的測試清單在這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章