我們可以讓繫結到某個url的函式返回html. 比如下面的**中,hello()
函式會返回由'
if __name__ == '__main__':
但大家看得出, 這樣直接通過python**返回html內容顯得很笨, 尤其當我們碰到需要對輸入變數做條件判斷和迴圈時, 我們經常需要做字串嵌入拼接這種體力活.
這種情況下, 我們需要利用flask自帶的jinja2模版引擎. 我們可以通過render_template()來渲染html檔案, 而不是直接把html直接硬編碼在python**中. 比如:
from flask import flask
def index():
return render_template(『hello.html』)
if __name__ == '__main__':
flask會預設嘗試從指令碼執行目錄下的templates資料夾中尋找html模版檔案,
--指令碼目錄"web模版系統" 是指乙個變數部分可以被動態替換的html**的系統. web模版系統包含乙個模版引擎, 一種資料來源, 和乙個模版處理工具.|_ hello.py
|_ templates
|_hello.html
flask使用jinja2模版引擎, web模版包含有按html語法書寫的指令碼和由變數或表示式構成的動態內容的佔位符. 這些佔位符會在模版渲染時被替換成需要展示的動態內容.
我們可以把如下內容儲存為hello.html:
然後執行下面的python**:
from flask import flask, render_template
def hello_name(user):
return render_template('hello.html', name = user)
if __name__ == '__main__':
伺服器在開發模式下開始執行之後, 我們開啟瀏覽器在位址列輸入http://localhost:5000/hello/mvl.
我們可以看到在模版的}
部分, 替換成了變數mvl
.
jinja2使用如下的佔位符語法:
下面的例子展示了模版中條件語句的使用.
hello_name()方法接收乙個整型引數, 傳遞給hello.html模版, 其中, masks變數接受到了這個整型變數, 並進行判斷比較, 是否大於50, 然後進行不同的渲染.
python程式如下:
from flask import flask, render_template
def hello_name(score):
return render_template('hello.html', marks = score)
if __name__ == '__main__':
模版hello.html如下:
注意, if-else和endif語句被包裹在
之中.
啟動指令碼並分別在瀏覽器輸入http://localhost/hello/60
和http://localhost/hello/30
, 觀察模版不同的渲染結果.
python中的迴圈語法也可以在模版中實現. 下面的程式中, 當請求 http://localhost:5000/result 時, result()方法就向模版result.html傳送了乙個字典物件用於渲染. 然後result.html使用for迴圈把字典result的鍵值對渲染到html**中.
python程式如下:
from flask import flask, render_template
def result():
dict =
return render_template('result.html', result = dict)
if __name__ == '__main__':
把下面result.html模版檔案儲存到預設templates模版資料夾中.
這裡, for迴圈宣告語句被用} }
包裹了起來, 鍵值對取值的部分被用}
包裹.
程式開始執行後, 我們可以開啟瀏覽器, 看看http://localhost:5000/result
的輸出.
譯 Flask教程 HTTP方法
http協議是全球資訊網資料通訊的基礎.在這個協議上可以對同一url使用不同的方法獲取資料.下面展示了幾種不同的http方法.flask路由預設處理的是get請求,但我們可以通過新增route 裝飾器的引數來改變這點.為便於演示url路由中的post方法,我們建立乙個html表單,並用這個表單給ur...
譯 Flask教程 重定向與錯誤
flask類有乙個redirect 方法.當我們呼叫它時,它會返回乙個響應物件並且按指定的狀態碼將使用者重定向到另乙個位置.redirect 方法的原型如下 flask.redirect location,statuscode,response 在上面的函式中,下面是一些標準的狀態碼 重定向的狀態碼...
flask的模版語法
引子 flask的模版語法需要jinja2的支援,不像django內建,但2者的語法基本一致,只是有寫不一樣的地方 和django模版相同與不同之處 1 檢視函式中和django基本一致 def detail id flask 不像django 不支援正則 用這種方法來傳值 也可以直接傳id 不規定...