在一般的 web 程式裡,訪問乙個位址通常會返回乙個包含各類資訊的 html 頁面。因為我們的程式是動態的,頁面中的某些資訊需要根據不同的情況來進行調整,比如對登入和未登入使用者顯示不同的資訊,所以頁面需要在使用者訪問時根據程式邏輯動態生成。
我們把包含變數和運算邏輯的 html 或其他格式的文字叫做模板,執行這些變數替換和邏輯計算工作的過程被稱為渲染,這個工作由我們這一章要學習使用的模板渲染引擎——jinja2 來完成。
$ mkdir templates複製**
}自我介紹為空。
複製**
jinja2 的語法和 python 大致相同,你在後面會陸續接觸到一些常見的用法。在模板裡,你需要新增特定的定界符將 jinja2 語句和變數標記出來,下面是三種常用的定界符:
模板中使用的變數需要在渲染的時候傳遞進去,具體我們後面會了解。
我們先在 templates 目錄下建立乙個 index.html 檔案,作為主頁模板。主頁需要顯示電影條目列表和個人資訊,**如下所示:
templates/index.html:主頁模板
} titles
複製**
為了方便對變數進行處理,jinja2 提供了一些過濾器,語法形式如下:
}複製**
左側是變數,右側是過濾器名。比如,上面的模板裡使用length
過濾器來獲取movies
的長度,類似 python 裡的len()
函式。
提示訪問 檢視所有可用的過濾器。
為了模擬頁面渲染,我們需要先建立一些虛擬資料,用來填充頁面內容:
name = 'grey li'
movies = [,,
,,,,
,,,,
]複製**
使用render_template()
函式可以把模板渲染出來,必須傳入的引數為模板檔名(相對於 templates 根目錄的檔案路徑),這裡即'index.html'
。為了讓模板正確渲染,我們還要把模板內部使用的變數通過關鍵字引數傳入這個函式,如下所示:
from flask import flask, render_template
# ...
def index():
return render_template('index.html', name=name, movies=movies)複製**
為了更好的表示這個檢視函式的作用,我們把原來的函式名hello
改為index
,意思是「索引」,即主頁。
在傳入render_template()
函式的關鍵字引數中,左邊的movies
是模板中使用的變數名稱,右邊的movies
則是該變數指向的實際物件。這裡傳入模板的name
是字串,movies
是列表,但能夠在模板裡使用的不只這兩種 python 資料結構,你也可以傳入元組、字典、函式等。
render_template()
函式在呼叫時會識別並執行 index.html 裡所有的 jinja2 語句,返回渲染好的模板內容。在返回的頁面中,變數會被替換為實際的值(包括定界符),語句(及定界符)則會在執行後被移除(注釋也會一併移除)。
現在訪問 http://localhost:5000/ 看到的程式主頁如下圖所示:
這一章我們編寫了乙個簡單的主頁。結束前,讓我們提交**:
$ git add .
$ git commit -m "add index page"
$ git push複製**
提示你可以在 github 上檢視本書示例程式的對應 commit:17b579d
Flask入門教程
目錄 1 flask 概述 2 flask 安裝 3 flask 應用 4 flask 路由 5 flask 變數規則 6 flask url構建 7 flask http方法 8 flask 模板 9 flask 靜態檔案 10 flask request物件 11 flask 將表單資料傳送到模...
Flask入門教程(1) 定義Flask
本系列文章僅為入門教程,入門舉例 1.匯入flask擴充套件 from flask import flask,escape,url for 2.建立flask 應用程式例項 需要傳入 name 作用是為了確定資源所在的目錄 3.定義路由及檢視函式 flask中定義路由是通過裝飾器實現的 defind...
Python關於flask 入門教程
flask核心 方法封裝 jinjia2 前端渲染值的語法 markupsafe 前端特殊字元的轉義,防止後端渲染時出現問題 itdangerous 加密和安全工具 werkzeug 德語,http協議封裝 1 pychrm右上角新建package,選擇flask,命名flask demo會自動生成...