iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

前幾天有講到Jinja2的一些基本用法,如果還不清出的話可以去看一下這篇文章喔。
今天我們會來介紹他的另一個功能|這個又稱為管道符pipe(好像是因為它的形狀很像水管,所以英文名稱就叫做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()

https://ithelp.ithome.com.tw/upload/images/20230919/201592255GCI6p8c6K.png
可以看到它將第一個字以外的字母全部變成小寫了,超好用的吧。
它還有蠻多好用的過濾器

過濾器 功能
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的用戶。最後顯示的畫面就會像下面一樣囉
https://ithelp.ithome.com.tw/upload/images/20230919/20159225jkdDB4Migk.png


上一篇
[Day 8] Flask重定向和錯誤
下一篇
[Day 10] Flask Cookie
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言