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