Flask框架(flask模板(jinja2)與字串過濾器、列表過濾器以及自定義過濾器)
阿新 • • 發佈:2019-01-13
模板變數 : {{name}}
1. 模板的定義: 模板變數 : {{name}}
2. 模板的渲染: render_template("模板名字",鍵=值,鍵=值)
例如: render_template("index.html",name="python",age="18")
如果傳值的話,想要直接在渲染函式裡面直接傳字典則:
可以事先定義好一個字典data,然後,render_template("index.html",**data)
首先是模板,裡面的變數的寫法和python的是一樣的, 如下面的 index.html (放在自建的templates目錄下面)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>name = {{ name }}</p> <p>age = {{ age }}</p> <p>my_dict: city={{ my_dict["city"] }}</p> <p>my_dict: city={{ my_dict.city}}</p> <p>my_list : {{ my_list }}</p> <p>my_list[my_int] : {{my_list[my_int] }}</p> <p>my_list[0] + my_list[1] : {{ my_list[0] + my_list[1] }}</p> </body> </html>
然後在程式中怎麼進行渲染
from flask import Flask, render_template app = Flask(__name__) @app.route("/index") def index(): data = { "name": "python", "age": 18, "my_dict": {"city": "sz"}, "my_list": [1, 2, 3, 4, 5], "my_int": 0 } # render_template("index.html",name="python",age="18") """也可以進行直接傳遞一個字典進去,但是字典的前面要加上兩個星號""" return render_template("index.html", **data) if __name__ == '__main__': app.run(debug=True)
執行的結果,就會按照模板裡面取裡面的值的方式,取出相應的值, 輸入127.0.0.1:5000/index
過濾器
1.字串過濾器
safe:禁用轉義;
<p>{{ '<em>hello</em>' | safe }}</p>
capitalize:把變數值的首字母轉成大寫,其餘字母轉小寫;
<p>{{ 'hello' | capitalize }}</p>
lower:把值轉成小寫;
<p>{{ 'HELLO' | lower }}</p>
upper:把值轉成大寫;
<p>{{ 'hello' | upper }}</p>
title:把值中的每個單詞的首字母都轉成大寫;
<p>{{ 'hello' | title }}</p>
trim:把值的首尾空格去掉;
<p>{{ ' hello world ' | trim }}</p>
reverse:字串反轉;
<p>{{ 'olleh' | reverse }}</p>
format:格式化輸出;
<p>{{ '%s is %d' | format('name',17) }}</p>
striptags:渲染之前把值中所有的HTML標籤都刪掉;
<p>{{ '<em>hello</em>' | striptags }}</p>
2.支援鏈式使用過濾器
<p>{{ “ hello world “ | trim | upper }}</p>
3.列表過濾器
first:取第一個元素
<p>{{ [1,2,3,4,5,6] | first }}</p>
last:取最後一個元素
<p>{{ [1,2,3,4,5,6] | last }}</p>
length:獲取列表長度
<p>{{ [1,2,3,4,5,6] | length }}</p>
sum:列表求和
<p>{{ [1,2,3,4,5,6] | sum }}</p>
sort:列表排序
<p>{{ [6,2,3,1,5,4] | sort }}</p>
自定義的過濾器
自定義的過濾器名稱如果和內建的過濾器重名,會覆蓋內建的過濾器。
方式一:
通過 add_template_filter (過濾器函式, 模板中使用的過濾器名字)
def list_step_2(li): """自定義的過濾器""" return li[::2] # 讓列表隔一個取一個 """自定義的過濾器要進行註冊""" # 第一個引數是函式名,第二個是過濾器名字 app.add_template_filter(list_step_2,"li2")
方式二:
通過裝飾器 app.template_filter (模板中使用的裝飾器名字)
@app.add_template_filter("li") def list_step_2(li): """自定義的過濾器""" return li[::2] # 讓列表隔一個取一個
在模板中直接接收:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>{{my_list | li2}}</p> </body> </html>