Jinja 中到處都允許使用基本表達式。這像常規的 Python 一樣工作,即使你不用 Python 工作,你也會感受到其帶來的便利。
### 字面量[](http://docs.jinkan.org/docs/jinja2/templates.html#id29 "Permalink to this headline")
表達式最簡單的形式就是字面量。字面量表示諸如字符串和數值的 Python 對象。下面 的字面量是可用的:
“Hello World”:
雙引號或單引號中間的一切都是字符串。無論何時你需要在模板中使用一個字 符串(比如函數調用、過濾器或只是包含或繼承一個模板的參數),它們都是 有用的。
42 / 42.23:
直接寫下數值就可以創建整數和浮點數。如果有小數點,則為浮點數,否則為 整數。記住在 Python 里,?42?和?42.0?是不一樣的。
[‘list’, ‘of’, ‘objects’]:
一對中括號括起來的東西是一個列表。列表用于存儲和迭代序列化的數據。例如 你可以容易地在 for 循環中用列表和元組創建一個鏈接的列表:
~~~
<ul>
{% for href, caption in [('index.html', 'Index'), ('about.html', 'About'),
('downloads.html', 'Downloads')] %}
<li><a href="{{ href }}">{{ caption }}</a></li>
{% endfor %}
</ul>
~~~
(‘tuple’, ‘of’, ‘values’):
元組與列表類似,只是你不能修改元組。如果元組中只有一個項,你需要以逗號 結尾它。元組通常用于表示兩個或更多元素的項。更多細節見上面的例子。
{‘dict’: ‘of’, ‘key’: ‘and’, ‘value’: ‘pairs’}:
Python 中的字典是一種關聯鍵和值的結構。鍵必須是唯一的,并且鍵必須只有一個 值。字典在模板中很少使用,罕用于諸如?[xmlattr()](http://docs.jinkan.org/docs/jinja2/templates.html#xmlattr "xmlattr")?過濾器之類。
true / false:
true 永遠是 true ,而 false 始終是 false 。
提示
特殊常量?true?、?false?和?none?實際上是小寫的。因為這在過去會導致 混淆,過去?True?擴展為一個被認為是 false 的未定義的變量。所有的這三個 常量也可以被寫成首字母大寫(True?、?False?和?None?)。盡管如此, 為了一致性(所有的 Jinja 標識符是小寫的),你應該使用小寫的版本。
### 算術[](http://docs.jinkan.org/docs/jinja2/templates.html#id30 "Permalink to this headline")
Jinja 允許你用計算值。這在模板中很少用到,但是為了完整性允許其存在。支持下面的 運算符:
+
把兩個對象加到一起。通常對象是素質,但是如果兩者是字符串或列表,你可以用這 種方式來銜接它們。無論如何這不是首選的連接字符串的方式!連接字符串見?~?運算符。?{{?1?+?1?}}?等于?2?。
-
用第一個數減去第二個數。?{{?3?-?2?}}?等于?1?。
/
對兩個數做除法。返回值會是一個浮點數。?{{?1?/?2?}}?等于?{{?0.5?}}?。
//
對兩個數做除法,返回整數商。?{{?20?//?7?}}?等于?2?。
%
計算整數除法的余數。?{{?11?%?7?}}?等于?4?。
*
用右邊的數乘左邊的操作數。?{{?2?*?2?}}?會返回?4?。也可以用于重 復一個字符串多次。?{{?‘=’?*?80?}}?會打印 80 個等號的橫條。
**
取左操作數的右操作數次冪。?{{?2**3?}}?會返回?8?。
### 比較[](http://docs.jinkan.org/docs/jinja2/templates.html#id31 "Permalink to this headline")
==
比較兩個對象是否相等。
!=
比較兩個對象是否不等。
>
如果左邊大于右邊,返回?true?。
>=
如果左邊大于等于右邊,返回?true?。
如果左邊小于右邊,返回?true?。
如果左邊小于等于右邊,返回?true?。
### 邏輯[](http://docs.jinkan.org/docs/jinja2/templates.html#id32 "Permalink to this headline")
對于?if?語句,在?for?過濾或?if?表達式中,它可以用于聯合多個表達式:
and
如果左操作數和右操作數同為真,返回 true 。
or
如果左操作數和右操作數有一個為真,返回 true 。
not
對一個表達式取反(見下)。
(expr)
表達式組。
提示
is?和?in?運算符同樣支持使用中綴記法:?foo?is?not?bar?和?foo?not?in?bar?而不是?not?foois?bar?和?not?foo?in?bar?。所有的 其它表達式需要前綴記法?not?(foo?and?bar)?。
### 其它運算符[](http://docs.jinkan.org/docs/jinja2/templates.html#id33 "Permalink to this headline")
下面的運算符非常有用,但不適用于其它的兩個分類:
in
運行序列/映射包含檢查。如果左操作數包含于右操作數,返回 true 。比如?{{?1?in[1,2,3]?}}?會返回 true 。
is
運行一個?[*測試*](http://docs.jinkan.org/docs/jinja2/templates.html#tests)?。
|
應用一個?[*過濾器*](http://docs.jinkan.org/docs/jinja2/templates.html#filters)?。
~
把所有的操作數轉換為字符串,并且連接它們。?{{?"Hello?"?~?name?~?"!"?}}?會返回(假設?name?值為?''John'?)?Hello?John!?。
()
調用一個可調用量:{{?post.render()?}}?。在圓括號中,你可以像在 python 中一樣使用位置參數和關鍵字參數:?{{?post.render(user,?full=true)?}}?。
. / []
獲取一個對象的屬性。(見?[*變量*](http://docs.jinkan.org/docs/jinja2/templates.html#variables)?)
### If 表達式[](http://docs.jinkan.org/docs/jinja2/templates.html#if-expression "Permalink to this headline")
同樣,也可以使用內聯的?if?表達式。這在某些情況很有用。例如你可以用來在一個 變量定義的情況下才繼承一個模板,否則繼承默認的布局模板:
~~~
{% extends layout_template if layout_template is defined else 'master.html' %}
~~~
一般的語法是??something>?if??is?true>?else??something?else>?。
else?部分是可選的。如果沒有顯式地提供 else 塊,會求值一個未定義對象:
~~~
{{ '[%s]' % page.title if page.title }}
~~~
- 介紹
- 預備知識
- 安裝
- 基本 API 使用
- 實驗性的 Python 3 支持
- API
- 基礎
- Unicode
- 高層 API
- 自動轉義
- 標識符的說明
- 未定義類型
- 上下文
- 加載器
- 字節碼緩存
- 實用工具
- 異常
- 自定義過濾器
- 求值上下文
- 自定義測試
- 全局命名空間
- 低層 API
- 元 API
- 沙箱
- API
- 運算符攔截
- 模板設計者文檔
- 概要
- 變量
- 過濾器
- 測試
- 注釋
- 空白控制
- 轉義
- 行語句
- 模板繼承
- HTML 轉義
- 控制結構清單
- 導入上下文行為
- 表達式
- 內置過濾器清單
- 內置測試清單
- 全局函數清單
- 擴展
- 自動轉義擴展
- 擴展
- 添加擴展
- i18n 擴展
- 表達式語句
- 循環控制
- With 語句
- 自動轉義擴展
- 編寫擴展
- 集成
- Babel 集成
- Pylons
- TextMate
- Vim
- 從其它的模板引擎切換
- Jinja1
- Django
- Mako
- 提示和技巧
- Null-Master 退回
- 交替的行
- 高亮活動菜單項
- 訪問父級循環