表達(dá)式

2018-02-24 15:39 更新

Jinja 中到處都允許使用基本表達(dá)式。這像常規(guī)的 Python 一樣工作,即使你不用 Python 工作,你也會(huì)感受到其帶來的便利。

字面量

表達(dá)式最簡(jiǎn)單的形式就是字面量。字面量表示諸如字符串和數(shù)值的 Python 對(duì)象。下面 的字面量是可用的:

“Hello World”:

雙引號(hào)或單引號(hào)中間的一切都是字符串。無論何時(shí)你需要在模板中使用一個(gè)字 符串(比如函數(shù)調(diào)用、過濾器或只是包含或繼承一個(gè)模板的參數(shù)),它們都是 有用的。

42 / 42.23:

直接寫下數(shù)值就可以創(chuàng)建整數(shù)和浮點(diǎn)數(shù)。如果有小數(shù)點(diǎn),則為浮點(diǎn)數(shù),否則為 整數(shù)。記住在 Python 里,?42?和?42.0?是不一樣的。

[‘list’, ‘of’, ‘objects’]:

一對(duì)中括號(hào)括起來的東西是一個(gè)列表。列表用于存儲(chǔ)和迭代序列化的數(shù)據(jù)。例如 你可以容易地在 for 循環(huán)中用列表和元組創(chuàng)建一個(gè)鏈接的列表:

<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’):

元組與列表類似,只是你不能修改元組。如果元組中只有一個(gè)項(xiàng),你需要以逗號(hào) 結(jié)尾它。元組通常用于表示兩個(gè)或更多元素的項(xiàng)。更多細(xì)節(jié)見上面的例子。

{‘dict’: ‘of’, ‘key’: ‘a(chǎn)nd’, ‘value’: ‘pairs’}:

Python 中的字典是一種關(guān)聯(lián)鍵和值的結(jié)構(gòu)。鍵必須是唯一的,并且鍵必須只有一個(gè) 值。字典在模板中很少使用,罕用于諸如?xmlattr()?過濾器之類。

true / false:

true 永遠(yuǎn)是 true ,而 false 始終是 false 。

提示

特殊常量?true?、?false?和?none?實(shí)際上是小寫的。因?yàn)檫@在過去會(huì)導(dǎo)致 混淆,過去?True?擴(kuò)展為一個(gè)被認(rèn)為是 false 的未定義的變量。所有的這三個(gè) 常量也可以被寫成首字母大寫(True?、?False?和?None?)。盡管如此, 為了一致性(所有的 Jinja 標(biāo)識(shí)符是小寫的),你應(yīng)該使用小寫的版本。

算術(shù)

Jinja 允許你用計(jì)算值。這在模板中很少用到,但是為了完整性允許其存在。支持下面的 運(yùn)算符:

+

把兩個(gè)對(duì)象加到一起。通常對(duì)象是素質(zhì),但是如果兩者是字符串或列表,你可以用這 種方式來銜接它們。無論如何這不是首選的連接字符串的方式!連接字符串見?~?運(yùn)算符。?{{?1?+?1?}}?等于?2?。

-

用第一個(gè)數(shù)減去第二個(gè)數(shù)。?{{?3?-?2?}}?等于?1?。

/

對(duì)兩個(gè)數(shù)做除法。返回值會(huì)是一個(gè)浮點(diǎn)數(shù)。?{{?1?/?2?}}?等于?{{?0.5?}}?。

//

對(duì)兩個(gè)數(shù)做除法,返回整數(shù)商。?{{?20?//?7?}}?等于?2?。

%

計(jì)算整數(shù)除法的余數(shù)。?{{?11?%?7?}}?等于?4?。

*

用右邊的數(shù)乘左邊的操作數(shù)。?{{?2??2?}}?會(huì)返回?4?。也可以用于重 復(fù)一個(gè)字符串多次。?{{?‘=’??80?}}?會(huì)打印 80 個(gè)等號(hào)的橫條。

**

取左操作數(shù)的右操作數(shù)次冪。?{{?2**3?}}?會(huì)返回?8?。

比較

==

比較兩個(gè)對(duì)象是否相等。

!=

比較兩個(gè)對(duì)象是否不等。

如果左邊大于右邊,返回?true?。

=

如果左邊大于等于右邊,返回?true?。

如果左邊小于右邊,返回?true?。

如果左邊小于等于右邊,返回?true?。

邏輯

對(duì)于?if?語句,在?for?過濾或?if?表達(dá)式中,它可以用于聯(lián)合多個(gè)表達(dá)式:

and

如果左操作數(shù)和右操作數(shù)同為真,返回 true 。

or

如果左操作數(shù)和右操作數(shù)有一個(gè)為真,返回 true 。

not

對(duì)一個(gè)表達(dá)式取反(見下)。

(expr)

表達(dá)式組。

提示

is?和?in?運(yùn)算符同樣支持使用中綴記法:?foo?is?not?bar?和?foo?not?in?bar?而不是?not?foois?bar?和?not?foo?in?bar?。所有的 其它表達(dá)式需要前綴記法?not?(foo?and?bar)?。

其它運(yùn)算符

下面的運(yùn)算符非常有用,但不適用于其它的兩個(gè)分類:

in

運(yùn)行序列/映射包含檢查。如果左操作數(shù)包含于右操作數(shù),返回 true 。比如?{{?1?in[1,2,3]?}}?會(huì)返回 true 。

is

運(yùn)行一個(gè)?測(cè)試?。

|

應(yīng)用一個(gè)?過濾器?。

~

把所有的操作數(shù)轉(zhuǎn)換為字符串,并且連接它們。?{{?"Hello?"?~?name?~?"!"?}}?會(huì)返回(假設(shè)?name?值為?''John'?)?Hello?John!?。

()

調(diào)用一個(gè)可調(diào)用量:{{?post.render()?}}?。在圓括號(hào)中,你可以像在 python 中一樣使用位置參數(shù)和關(guān)鍵字參數(shù):?{{?post.render(user,?full=true)?}}?。

. / []

獲取一個(gè)對(duì)象的屬性。(見?變量?)

If 表達(dá)式

同樣,也可以使用內(nèi)聯(lián)的?if?表達(dá)式。這在某些情況很有用。例如你可以用來在一個(gè) 變量定義的情況下才繼承一個(gè)模板,否則繼承默認(rèn)的布局模板:

{% extends layout_template if layout_template is defined else 'master.html' %}

一般的語法是??something>?if??is?true>?else??something?else>?。

else?部分是可選的。如果沒有顯式地提供 else 塊,會(huì)求值一個(gè)未定義對(duì)象:

{{ '[%s]' % page.title if page.title }}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)