Python Flask入門之模板
在一般的 Web 程序裡,訪問一個地址通常會返回一個包含各類信息的 HTML 頁面。因為我們的程序是動態的,頁面中的某些信息需要根據不同的情況來進行調整,比如對登錄和未登錄用戶顯示不同的信息,所以頁面需要在用戶訪問時根據程序邏輯動態生成。
我們把包含變量和運算邏輯的 HTML 或其他格式的文本叫做模板,執行這些變量替換和邏輯計算工作的過程被稱為渲染(模板渲染引擎——Jinja2)。
按照默認的設置,Flask 會從程序實例所在模塊同級目錄的 templates 文件夾中尋找模板。
模板基本語法
在模板裡,你需要添加特定的定界符將 Jinja2 語句和變量標記出來
下面是三種常用的定界符:
1、{{ … }} 用來標記變量。
2、{% … %} 用來標記語句,比如 if 語句,for 語句等。
3、{# … #} 用來寫註釋。
模板中使用的變量需要在渲染的時候傳遞進去。
編寫主頁模板
我們先在 templates 目錄下創建一個 movie.html 文件,作為主頁模板。主頁需要顯示電影條目列表和個人信息,代碼如下所示:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>movie list</title> </head> <body> {# 使用 length 過濾器獲取 movies 變量的長度 #} <p>{{ movies|length }} Titles</p> <ul> {% for movie in movies %} {# 迭代 movies 變量 #} <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同於 movie['title'] #} {% endfor %} {# 使用 endfor 標簽結束 for 語句 #} </ul> </body> </html>
為瞭方便對變量進行處理,Jinja2 提供瞭一些過濾器(和Vue.js框架中的過濾器有著異曲同工之妙),語法形式如下:
{{ 變量|過濾器 }}
左側是變量,右側是過濾器名。比如,上面的模板裡使用 length 過濾器來獲取movies 的長度,類似 Python 裡的 len() 函數。
準備虛擬數據
為瞭模擬頁面渲染,我們需要先創建一些虛擬數據,用來填充頁面內容,其中template.py中定義虛擬數據。
movies = [{'title': '長津湖', 'year': '2021'},{'title': '送你一朵小紅花', 'year': '2021'}]
渲染主頁模板
使用 render_template() 函數可以把模板渲染出來,必須傳入的參數為模板文件名(相對於 templates 根目錄的文件路徑),這裡即 ‘movie.html’ 。為瞭讓模板正確渲染,我們還要把模板內部使用的變量通過關鍵字參數傳入這個函數,如下所示:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def movie(): return render_template('movie.html', movies=movies) if __name__ == "__main__": app.run()
在傳入 render_template()
函數的關鍵字參數中,左邊的 movies 是模板中使用的變量名稱,右邊的movies 則是該變量指向的實際對象。這裡傳入模板的movies 是列表,但能夠在模板裡使用的不隻這一種 Python數據結構,你也可以傳入字符串、元組、字典、函數等。
render_template()
函數在調用時會識別並執行 “movie.html” 裡所有的 Jinja2 語句,返回渲染好的模板內容。在返回的頁面中,變量會被替換為實際的值(包括定界符),語句(及定界符)則會在執行後被移除(註釋也會一並移除)。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Jinja2過濾器的使用、控制語句示例詳解
- Python3+Flask安裝使用教程詳解
- python jinja2模板的使用示例
- Flask模板繼承深入理解與應用
- Pyhon Flask框架:第一個Flask程序