第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁(yè) 慕課教程 Flask 框架教程 Flask 框架教程 jinja2 模板過(guò)濾器的使用

Jinja2 模板過(guò)濾器的使用

為了方便對(duì)變量進(jìn)行處理,Jinja2 提供了過(guò)濾器。在上一個(gè)小節(jié)中,講解了 Jinja2 的模板語(yǔ)法,簡(jiǎn)單的介紹了 Jinja2 的過(guò)濾器,本小節(jié)講解了 Jinja2 中常見(jiàn)的過(guò)濾器,并介紹如何編寫(xiě)自己的過(guò)濾器。

1. 過(guò)濾器簡(jiǎn)介

1.1 什么是過(guò)濾器

通過(guò)在 Jinja2 模板中嵌入變量,可以輸出變量的值。但是,在很多情況下,不僅僅只是需要輸出變量的值,還需要修改變量的顯示,對(duì)變量進(jìn)行格式化、運(yùn)算等。為了方便對(duì)變量進(jìn)行處理,Jinja2 提供了過(guò)濾器,Jinja2 過(guò)濾器是一個(gè)函數(shù),該函數(shù)對(duì)輸入變量進(jìn)行變換處理后,返回一個(gè)值作為 Jinja2 模板的輸出。

1.2 過(guò)濾器的用法

Jinja2 中過(guò)濾器有如下用法:

1. {{ var | filter }}

過(guò)濾器不帶任何參數(shù),例如,過(guò)濾器 upper 將輸入變量 var 轉(zhuǎn)換為大寫(xiě), {{“hello” | upper }} 的輸出為 “HELLO”。

2. {{ var | filter(arg) }}

過(guò)濾器帶有參數(shù),例如,過(guò)濾器 replace (source, target) 將輸入變量 var 中的字符串 source 替換為字符串 target,{{ “idcbgp.cn” | replace (“imooc”, “IMOOC”) }} 的輸出為 “idcbgp.cn”。

3. {{ var | filterA | filterB }}

過(guò)濾器可以組合使用,{{var | filterA | filterB}} 的處理過(guò)程如下:

  • 輸入變量 var 傳遞給第一個(gè)過(guò)濾器 fiterA;
  • 將過(guò)濾器 filterA 的輸出作為輸入,傳遞給第二個(gè)過(guò)濾器 filterB;
  • 將過(guò)濾器 filterB 的輸出作為模板的輸出。

例如:{{“abc” | upper | reverse }} 的輸出為 “CBA”。

2. Jinja2 常用的過(guò)濾器

2.1 字符串操作

capitalize(input)

把變量 input 的首字母轉(zhuǎn)成大寫(xiě),其余字母轉(zhuǎn)小寫(xiě),例如:

{{ 'flask' | capitalize }}

輸出:

Flask

title(input)

把變量 input 中的每個(gè)單詞的首字母都轉(zhuǎn)成大寫(xiě),例如:

{{ 'hello world' | title }}

輸出:

Hello World

lower(input)

把字符串 input 轉(zhuǎn)成小寫(xiě),例如:

{{ 'ABC' | lower }}

輸出:

abc

upper(input)

把字符串 input 轉(zhuǎn)成大寫(xiě),例如:

{{ 'abc' | upper }}

輸出:

ABC

revsere(input)

把字符串 input 反轉(zhuǎn),例如:

{{ 'abc' | reverse }}

輸出:

cba

format(string, arg1, arg2, …)

對(duì)字符串 string 進(jìn)行格式化,例如:

{{ 'I am %s, I am %d years old.' | format('tom', 10) }}

輸出:

I am tom, I am 10 years old.

2.2 列表操作

first(list)

獲取列表 list 中的第一個(gè)元素,例如:

{{ ['www', 'imooc', 'com'] | first }}

輸出:

www

last(list)

獲取列表 list 中的最后一個(gè)元素,例如:

{{ ['www', 'imooc', 'com'] | last }}

輸出:

com

length(list)

獲取列表 list 長(zhǎng)度,例如:

{{ ['www', 'imooc', 'com'] | length }}

輸出:

3

sum(list)

對(duì)列表 list 求和,例如:

{{ [1, 2, 3] | sum }}

輸出:

6

sort(list, reverse = False)

對(duì)列表 list 排序,參數(shù) reverse 為真表示對(duì) list 按倒序進(jìn)行排序,例如:

{{ [1, 3, 2] | sort }}
{{ [1, 3, 2] | sort(reverse = True) }}

輸出:

123
321

join(list, seperator)

將序列 list 中包含的字符串拼接成一個(gè)字符串,使用 seperator 作為連接符,例如:

{{ ['www', 'imooc', 'com'] | join('.') }}

輸出:

idcbgp.cn

2.3 其它常用的過(guò)濾器

striptags(input)

把變量 input 中所有的 HTML 標(biāo)簽都刪掉,例如:

{{ '<h1>idcbgp.cn</h1>' | striptags }}

輸出:

idcbgp.cn

escape(input)

將變量 input 中的 < > 等符號(hào)轉(zhuǎn)義成 HTML 中的符號(hào),例如:

{{ '1 < 2' | escape }}
{{ '2 > 1' | escape }}

輸出:

1 < 2
2 > 1

default(value, default_value=’’)

如果變量 value 不存在,使用默認(rèn)值 default_value,例如,變量 gender 未定義:

{{ gender | default('male') }}

輸出:

male

如果變量 value 存在,使用原有的值,例如,變量 gender 存在且值為 ‘female’:

{{ gender | default('male') }}

輸出:

female

3. 自定義過(guò)濾器

3.1 自定義過(guò)濾器的方法

開(kāi)發(fā)者可以定義自己的過(guò)濾器,有兩種方法:

  • 使用 app.add_template_filter(filter_function, filter_name),將函數(shù) filter_function 注冊(cè)為名稱為 filter_name 的過(guò)濾器;
  • 使用 @app.template_filter(filter_name) 裝飾一個(gè)函數(shù) filter_function,將函數(shù) filter_function 注冊(cè)為名稱為 filter_name 的過(guò)濾器。

3.2 例子

本小節(jié)通過(guò)一個(gè)例子,說(shuō)明自定義過(guò)濾器的使用方法。

3.2.1 主程序 app.py

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', input = 123)

編寫(xiě)路徑 / 的處理函數(shù) index (),將變量 input 傳遞給模板 ‘index.html’。

def increase(input):
    output = input + 1
    return output
app.add_template_filter(increase, 'increase') 

函數(shù) increase 的功能是將輸入變量加 1。使用 app.add_template_filter(increase, 'increase'),將函數(shù) increase 注冊(cè)為名稱為 ‘increase’ 的過(guò)濾器。

@app.template_filter('decrease')
def decrease(input):
    output = input - 1
    return output

函數(shù) decrease 的功能是將輸入變量減 1。使用 @app.template_filter (‘decrease’),將函數(shù) decrease 注冊(cè)為名稱為 ‘decrease’ 的過(guò)濾器。

app.run(debug = True)

最后啟動(dòng) Flask 程序。

3.2.2 模板 templates/index.html

編寫(xiě) Jinja2 模板文件 templates/index.html,放在目錄 templates 下。

<html>
<body>
  <h2>increase {{input}} = {{ input | increase }}</h2>
  <h2>decrease {{input}} = {{ input | decrease }}</h2>
</body>
</html>

在第 3 行,{{input | increase}} 使用過(guò)濾器 increase 對(duì) input 進(jìn)行加 1 操作;在第 4 行,{{ input | decrease }} 使用過(guò)濾器 decrease 對(duì) input 進(jìn)行減 1 操作。

3.2.3 例子運(yùn)行結(jié)果

在瀏覽器中打開(kāi) localhost:5000,顯示如下:

圖片描述

3.3 源代碼下載

4. 小結(jié)

本節(jié)講解了 Jinja2 中常見(jiàn)的過(guò)濾器,并介紹了如何定義自己的過(guò)濾器,使用思維導(dǎo)圖總結(jié)如下:

圖片描述