模板簡單介紹:
視圖函數:視圖函數就是裝飾器所裝飾的方法,視圖函數的主要作用是生成請求的響應,這是最簡單的請求。實際上,視圖函數有兩個作用:處理業務邏輯和返回響應內容。在大型應用中,把業務邏輯和表現內容放在一起,會增加代碼的復雜度和維護成本。本節學到的模板,它的作用即是承擔視圖函數的另一個作用,即返回響應內容。
模板其實是一個包含響應文本的文件,其中用占位符(變量)表示動態部分,告訴模板引擎其具體的值需要從使用的數據中獲取,使用真實值替換變量,再返回最終得到的字符串,這個過程稱為“渲染”,Flask是使用 Jinja2 這個模板引擎來渲染模板
Jinja2(參考概念)
兩個概念:
Jinja2:是 Python 下一個被廣泛應用的模板引擎,是由Python實現的模板語言,他的設計思想來源於 Django 的模板引擎,並擴展了其語法和一系列強大的功能,其是Flask內置的模板語言。
模板語言:是一種被設計來自動生成文檔的簡單文本格式,在模板語言中,一般都會把一些變量傳給模板,替換模板的特定位置上預先定義好的占位變量名。
官方文檔
渲染模版函數
Flask提供的 render_template 函數封裝了該模板引擎
模板簡單理解就是把前后的代碼分離讓開發者高效的開發,讓代碼結構清晰,耦合度降低
使用render_template:
網頁模板需要flask內的render_template模塊:
傳參需要先定義好參數傳入時render_template()內的第一個參數是html模板名后續加參數,傳參時是賦值式 (在html內的標識)= (傳入的變量名),也可以用**args,把數據以key value 形式傳入字典把整個字典 **變量名傳入 到html里直接調用key即可。
render_template 函數的第一個參數是模板的文件名,后面的參數都是鍵值對
{%邏輯運算%}有邏輯運算時必須有{%end%}結束比如:
{%if sum < 1%} | {%for i in sum%}
{% endif %} | {% endfor %}
html文件內注釋可以使用{# 注釋內容 #},也可以使用html內的<!-- 注釋 -->注釋,但是在邏輯運算時如果使用html內的注釋會報錯,所以建議常用flask內置注釋方法 {# 注釋內容 #}
PY文件
# -*- encoding: utf-8 -*- # 網頁模板需要導入render_template from flask import Flask, render_template app = Flask(__name__) app.config.from_pyfile('config.ini') @app.route('/') def index(): my_str = '你好世界' my_int = 123 my_list = [1, 2, 3, 48, 93] my_dict = {'name': '星宇', 'age': 19} contect = {} contect['my_shijei'] = my_str contect['myint'] = 0 contect['mylist'] = [1, 2, 3, 48, 93] contect['mydict'] = {'name': '牛星宇', 'age': 19} # 使用render_template模塊來渲染模板文件,通過第二個參數傳遞數據變量 # return render_template('day3.html', my_shijei=my_str, myint=my_int, mydict=my_dict, mylist=my_list) # 通過**引用來將嵌套dict直接傳遞給模板 return render_template('day3.html', **contect) if __name__ == "__main__": app.run()
HTML文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>flask網頁模板的學習</title> </head> <body> <div>這是我們第一個網頁模板</div> <br /> {# 這是注釋,最基本的模板語法輸出一個變量 #} {{ my_shijei + "李毅囧" }}<br /> {# 模板語法可以以下標引用的方式輸出list元素#} {{ mylist[0]}}{{ mylist.1}}<br /> {#模板可以做簡單的運算操作#} {{ myint + 10 }} <br /> {# 模板可以通過調用key取value#} {{ mydict["name"] }}{{ mydict.age }} {#使用{%%}來定義簡單的邏輯控制代碼#} {% if myint %} 整型存在 {% else %} 不存在 {#使用if判斷,一定要有endif用來判斷結束邏輯判斷#} {% endif %} <ul> {# 使用for循環來遍歷list #} {% for itme in mylist %} <li>{{ itme }}</li> {% endfor %} </ul> {# 使用 if for 嵌套來實現單雙行背景色#} <table style="padding:5px"> {% for item in mylist %} {#使用loop關鍵字可以調用循環的索引,用來判斷下標單雙數#} {% if loop.index% 2 == 0 %} <tr style="background-color:tomato"> <td style="border:1px solid black;">{{ item }}</td> </tr> {%else%} <tr style="background-color:violet"> <td style="border:1px solid black;">{{ item }}</td> </tr> {% endif%} {% endfor %} </table> </body> </html>
