Flask 學習(三)模板
Flask 為你配置 Jinja2 模板引擎。使用 render_template() 方法可以渲染模板,只需提供模板名稱和需要作為參數傳遞給模板的變量就可簡單執行。
至於模板渲染? 簡單來說,就是將“數據”渲染到你的模板里。看完以下章節示例你就會知道了。
(其實更為推薦的方式是前后端分離,不推薦用Flask模板,以下僅供學習參考)
模板基礎
先來看一個最簡單的模板示例:
from flask import Flask, render_template from models import User app = Flask(__name__) @app.route("/") def template1(): return render_template("index.html")
上述代碼還是比較易讀的,即當前路由 "/" 會返回模板為 index.html 的文檔。如示例運行后,訪問 localhost:5000 會返回顯示 index.html
那上述 index.html 這類 html 模板文檔應放置在哪呢? Flask 會在 templates 文件夾(注意拼寫)內尋找模板。因此,如果你的應用是一個模塊,那么模板文件夾應該在模塊旁邊;如果是一個包,那么就應該在包里面:
情形 1: 一個模塊:
/application.py
/templates
/xxx.html
情形 2: 一個包:
/application
/__init__.py
/templates
模板渲染
這邊僅簡單介紹下模板渲染,可以充分使用 Jinja2 模板引擎的威力。更多內容,詳見官方 Jinja2 模板文檔 。
新建一 flask.html , 同樣放置於 templates 文件夾中,body 內容參考如下:
<body> <h1>{{ content }}</h1> </body>
其中 {{ content }} 即為需要傳遞的參數; 這邊的模板文件 跟 HTML文件 的區別只是里面加入了以 {{ ... }} 組成的動態內容占位符
同上例,新建一路由,代碼如下:
@app.route("/flask") def template2(): c = "flask" return render_template("flask.html",content=c)
示例運行后,訪問 localhost:5000/flask 會返回顯示 flask.html , 其中 content 部分會返回代碼中你所設置的值:
模板衍生
在模板內部你也可以訪問 request 、session 和 g 對象,以及 get_flashed_messages() 函數。
模板在繼承使用的情況下尤其有用, 如需了解,請參閱 模板繼承文檔 。簡單的說,模板繼承可以使每個頁面的特定元素(如頁頭,導航,頁尾)保持一致。
自動轉義默認開啟。因此,如果 name 包含 HTML ,那么會被自動轉義。如果你可以信任某個變量,且知道它是安全的 HTML (例如變量來自一個把 wiki 標記轉換為 HTML 的模塊),那么可以使用 Markup 類把它標記為安全的。否則請在模板 中使用 |safe 過濾器。更多例子參見 Jinja 2 文檔。
本篇博文僅簡單介紹下 Flask 模板,簡單的頁面使用 Flask 模板是很方便的,但復雜的就麻煩了。誠如開頭所言,推薦前后端分離的做法,詳細的模板使用還請參閱 Jinja 2 文檔。
