【Flask】Jinja2模板的使用及控制语句
Jinja2模板
在前面的實(shí)例中,視圖函數(shù)的主要作用是生成請求的響應(yīng),這是最簡單請求.實(shí)際上,視圖函數(shù)有兩個(gè)作用:
- 處理業(yè)務(wù)邏輯
- 返回響應(yīng)內(nèi)容
在大型應(yīng)用中,把業(yè)務(wù)邏輯和表現(xiàn)內(nèi)容放在一起,會增加代碼的復(fù)雜度和維護(hù)成本.
- 模板其實(shí)是一個(gè)包含響應(yīng)文本的文件,其中用占位符(變量)表示動態(tài)部分,告訴模板引擎其具體的值需要從使用的數(shù)據(jù)中獲取
- 使用真實(shí)值替換變量,再返回最終得到的字符串,這個(gè)過程稱為’渲染’
- Flask是使用Jinja2這個(gè)模板引擎來渲染模板
使用模板的好處
- 視圖函數(shù)只負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)處理(業(yè)務(wù)邏輯方面)
- 而模板則取到視圖函數(shù)的數(shù)據(jù)結(jié)果進(jìn)行展示(試圖展示方面)
- 代碼結(jié)構(gòu)清晰,耦合度低
1、Jinja2模板介紹
Jinja2:是Python的Web項(xiàng)目中被廣泛應(yīng)用的模板引擎,是由Python實(shí)現(xiàn)的模板語言,Jinja2 的作者也是 Flask 的作者。他的設(shè)計(jì)思想來源于Django的模板引擎,并擴(kuò)展了其語法和一系列強(qiáng)大的功能,其是Flask內(nèi)置的模板語言。
jinja2之所以被廣泛使用是因?yàn)樗哂幸韵聝?yōu)點(diǎn):
- 1、相對于Template,jinja2更加靈活,它提供了控制結(jié)構(gòu),表達(dá)式和繼承等。
- 2、相對于Mako,jinja2僅有控制結(jié)構(gòu),不允許在模板中編寫太多的業(yè)務(wù)邏輯。
- 3、相對于Django模板,jinja2性能更好。
- 4、Jinja2模板的可讀性很棒。
要渲染一個(gè)模板,通過 render_template 方法即可。
模板傳參
1、在使用render_template渲染模版的時(shí)候,可以傳遞關(guān)鍵字參數(shù)(命名參數(shù))。以后直接在模版中使用就可以了。
2、 如果你的參數(shù)項(xiàng)過多,那么可以將所有的參數(shù)放到一個(gè)字典中,或者列表中都可以。一般如果想將字典打散成關(guān)鍵字參數(shù)可以在參數(shù)的前面加 **
案例1:
傳遞到模板中的參數(shù)為字典形式的數(shù)據(jù)
視圖函數(shù)
模板文件
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>第一個(gè)模板</title> </head> <body>學(xué)生的姓名:{{ name }} <br>學(xué)生的年領(lǐng):{{ age }} <br>{% if age >= 18 %}已經(jīng)成年 <br>{% else %}未成年 <br>{% endif %}學(xué)生的性別:{{ gender }} </body> </html>執(zhí)行結(jié)果:
案例2
傳遞到模板中的參數(shù)為嵌套字典的列表
from flask import Flask, render_template# todo 初始化Flask項(xiàng)目的服務(wù) app = Flask(__name__)student_list=[{'name': 'kobe', 'age': 14, 'gender': '男'} ,{'name': 'kd', 'age': 19, 'gender': '男'},{'name': 'love', 'age': 20, 'gender': '女'} ]@app.route('/test2') def test2():return render_template('02.html',stu_list=student_list)if __name__ == '__main__':# 0.0.0.0:代表當(dāng)前的系統(tǒng)的所有的ip地址,# 設(shè)置端口為8080,# flask的debug模式:把錯(cuò)誤的信息顯示到頁面中app.run(host='0.0.0.0', port=8080, debug=True)模板文件:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>第二個(gè)模板</title> </head> <body>{{ stu_list }} <table border="1px"><tr><td>序號</td><td>姓名</td><td>年領(lǐng)</td><td>性別</td></tr>{% for stu in stu_list %}<tr><td>{{ loop.index }}</td><td>{{ stu.name }}</td> <!--由于stu是字典有3種寫法得到key的value值-->{% if stu.age >=60 %}<td>已退休</td>{% elif stu.age>=18 and stu.age<60 %}<td>成年</td>{% else %}<td>未成年</td>{% endif %}<td>{{ stu.get('gender') }}</td></tr>{% endfor %}</table> </body> </html>案例3
傳遞到模板中的參數(shù)為嵌套字典的字典
from flask import Flask, render_template# todo 初始化Flask項(xiàng)目的服務(wù) app = Flask(__name__)student_dict={'a':{'name': 'kobe', 'age': 14, 'gender': '男'} ,'b':{'name': 'kd', 'age': 19, 'gender': '男'},'c':{'name': 'love', 'age': 20, 'gender': '女'} }@app.route('/test3') def test3():return render_template('03.html',stu_dict=student_dict)if __name__ == '__main__':# 0.0.0.0:代表當(dāng)前的系統(tǒng)的所有的ip地址,# 設(shè)置端口為8080,# flask的debug模式:把錯(cuò)誤的信息顯示到頁面中app.run(host='0.0.0.0', port=8080, debug=True)模板文件
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>第三個(gè)模板</title> </head> <body>{{ stu_dict }} <table border="1px"><tr><td>序號</td><td>姓名</td><td>年領(lǐng)</td><td>性別</td></tr>{% for stu_key,stu in stu_dict.items() %}<tr><td>{{ loop.index }}</td><td>{{ stu.name }}</td> <!--由于stu是字典有3種寫法得到key的value值-->{% if stu.age >=60 %}<td>已退休</td>{% elif stu.age>=18 and stu.age<60 %}<td>成年</td>{% else %}<td>未成年</td>{% endif %}<td>{{ stu.get('gender') }}</td></tr>{% endfor %}</table> </body> </html>總結(jié)
以上是生活随笔為你收集整理的【Flask】Jinja2模板的使用及控制语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Flask】Jinja2之测试器的应用
- 下一篇: 【Flask】项目中使用请求钩子的妙处有