前幾天有講到Jinja2的一些基本用法,如果還不清出的話可以去看一下這篇文章喔。
今天我們會來介紹他的另一個功能|
這個又稱為管道符pipe
(好像是因為它的形狀很像水管,所以英文名稱就叫做pipe)。
什麼是pipe呢?他的主要作用是將左側變數的值傳遞給右側的過濾器filter
進行處理,可以實現模板變數的格式化轉換。
過濾器可以看成是一種特殊的函數,可以將變數輸入,並返回轉換或格式化的變數。在Jinja2中內建了大量好用的過濾器,也支持自訂過濾器。
{{ variable | filter }}
這裡的variable
是一個變數或對象,而filter就是過濾器的名稱。管道符號就會將variable的值傳給過濾器進行處理,並輸出處理後的結果
{{ name | lower }}
例如上面這個程式碼,他將name這個變數傳給lower過濾器,並將它轉成小寫後顯示。
而多個管道也可以鏈式調用,一個變數可以傳遞給多個過濾器依次處理
{{ name | lower | capitalize }}
我們用一個簡單的範例來試試看吧
from flask import Flask, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
template = """
{{ name | lower | capitalize }}
"""
return render_template_string(template, name='aRBIN RRRRRRRRrrrrrr')
if __name__ == '__main__':
app.run()
可以看到它將第一個字以外的字母全部變成小寫了,超好用的吧。
它還有蠻多好用的過濾器
過濾器 | 功能 |
---|---|
lower | 轉為小寫 |
upper | 轉為大寫 |
title | 將每個單字第一個字母轉為大寫 |
capitalize | 將第一個字母轉為大寫 |
trim | 刪除兩端的空格 |
date | 日期格式化 |
int | 轉成整數 |
float | 轉成福點數 |
round | 四捨五入 |
abs | 取絕對值 |
from flask import Flask, render_template_string
app = Flask(__name__)
users = [
{'username': 'john', 'hidden': False},
{'username': 'mary', 'hidden': True},
{'username': 'peter', 'hidden': False}
]
@app.route('/')
def index():
template = """
<h1>USER LIST</h1>
<ul>
{% for user in users if not user.hidden %}
<li>{{ user.username | e | capitalize }}</li>
{% endfor %}
</ul>
"""
return render_template_string(template, users=users)
if __name__ == '__main__':
app.run(debug=True)
可以注意到在template裡首先對users列表用for循環遍歷,並使用if not過濾hidden屬性為True的用戶。最後顯示的畫面就會像下面一樣囉