Python Flask入門(mén)之模板
在一般的 Web 程序里,訪問(wèn)一個(gè)地址通常會(huì)返回一個(gè)包含各類信息的 HTML 頁(yè)面。因?yàn)槲覀兊某绦蚴莿?dòng)態(tài)的,頁(yè)面中的某些信息需要根據(jù)不同的情況來(lái)進(jìn)行調(diào)整,比如對(duì)登錄和未登錄用戶顯示不同的信息,所以頁(yè)面需要在用戶訪問(wèn)時(shí)根據(jù)程序邏輯動(dòng)態(tài)生成。
我們把包含變量和運(yùn)算邏輯的 HTML 或其他格式的文本叫做模板,執(zhí)行這些變量替換和邏輯計(jì)算工作的過(guò)程被稱為渲染(模板渲染引擎——Jinja2)。
按照默認(rèn)的設(shè)置,F(xiàn)lask 會(huì)從程序?qū)嵗谀K同級(jí)目錄的 templates 文件夾中尋找模板。
模板基本語(yǔ)法
在模板里,你需要添加特定的定界符將 Jinja2 語(yǔ)句和變量標(biāo)記出來(lái)
下面是三種常用的定界符:
1、{{ … }} 用來(lái)標(biāo)記變量。
2、{% … %} 用來(lái)標(biāo)記語(yǔ)句,比如 if 語(yǔ)句,for 語(yǔ)句等。
3、{# … #} 用來(lái)寫(xiě)注釋。
模板中使用的變量需要在渲染的時(shí)候傳遞進(jìn)去。
編寫(xiě)主頁(yè)模板
我們先在 templates 目錄下創(chuàng)建一個(gè) movie.html 文件,作為主頁(yè)模板。主頁(yè)需要顯示電影條目列表和個(gè)人信息,代碼如下所示:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>movie list</title> </head> <body> {# 使用 length 過(guò)濾器獲取 movies 變量的長(zhǎng)度 #} <p>{{ movies|length }} Titles</p> <ul> {% for movie in movies %} {# 迭代 movies 變量 #} <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同于 movie['title'] #} {% endfor %} {# 使用 endfor 標(biāo)簽結(jié)束 for 語(yǔ)句 #} </ul> </body> </html>
為了方便對(duì)變量進(jìn)行處理,Jinja2 提供了一些過(guò)濾器(和Vue.js框架中的過(guò)濾器有著異曲同工之妙),語(yǔ)法形式如下:
{{ 變量|過(guò)濾器 }}
左側(cè)是變量,右側(cè)是過(guò)濾器名。比如,上面的模板里使用 length 過(guò)濾器來(lái)獲取movies 的長(zhǎng)度,類似 Python 里的 len() 函數(shù)。
準(zhǔn)備虛擬數(shù)據(jù)
為了模擬頁(yè)面渲染,我們需要先創(chuàng)建一些虛擬數(shù)據(jù),用來(lái)填充頁(yè)面內(nèi)容,其中template.py中定義虛擬數(shù)據(jù)。
movies = [{'title': '長(zhǎng)津湖', 'year': '2021'},{'title': '送你一朵小紅花', 'year': '2021'}]
渲染主頁(yè)模板
使用 render_template() 函數(shù)可以把模板渲染出來(lái),必須傳入的參數(shù)為模板文件名(相對(duì)于 templates 根目錄的文件路徑),這里即 ‘movie.html' 。為了讓模板正確渲染,我們還要把模板內(nèi)部使用的變量通過(guò)關(guān)鍵字參數(shù)傳入這個(gè)函數(shù),如下所示:
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()
函數(shù)的關(guān)鍵字參數(shù)中,左邊的 movies 是模板中使用的變量名稱,右邊的movies 則是該變量指向的實(shí)際對(duì)象。這里傳入模板的movies 是列表,但能夠在模板里使用的不只這一種 Python數(shù)據(jù)結(jié)構(gòu),你也可以傳入字符串、元組、字典、函數(shù)等。
render_template()
函數(shù)在調(diào)用時(shí)會(huì)識(shí)別并執(zhí)行 “movie.html” 里所有的 Jinja2 語(yǔ)句,返回渲染好的模板內(nèi)容。在返回的頁(yè)面中,變量會(huì)被替換為實(shí)際的值(包括定界符),語(yǔ)句(及定界符)則會(huì)在執(zhí)行后被移除(注釋也會(huì)一并移除)。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python?TypeError:?‘float‘?object?is?not?subscriptable錯(cuò)
發(fā)現(xiàn)問(wèn)題寫(xiě)python的時(shí)候出現(xiàn)了這個(gè)錯(cuò),所以想著給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Python?TypeError:?‘float‘?object?is?not?subscriptable錯(cuò)誤的解決辦法,需要的朋友可以參考下2022-12-12快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭
這篇文章主要介紹了如何快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭,幫助大家更好的理解和學(xué)習(xí)使用python爬蟲(chóng),感興趣的朋友可以了解下2021-03-03Python使用Matplotlib實(shí)現(xiàn)創(chuàng)建動(dòng)態(tài)圖形
動(dòng)態(tài)圖形是使可視化更具吸引力和用戶吸引力的好方法,它幫助我們以有意義的方式展示數(shù)據(jù)可視化,本文將利用Matplotlib實(shí)現(xiàn)繪制一些常用動(dòng)態(tài)圖形,希望對(duì)大家有所幫助2024-02-02Python中數(shù)組,列表:冒號(hào)的靈活用法介紹(np數(shù)組,列表倒序)
下面小編就為大家分享一篇Python中數(shù)組,列表:冒號(hào)的靈活用法介紹(np數(shù)組,列表倒序),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04python自動(dòng)化實(shí)現(xiàn)自動(dòng)回復(fù)QQ消息
這篇文章主要介紹了python自動(dòng)化實(shí)現(xiàn)自動(dòng)回復(fù)QQ消息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03利用Python通過(guò)獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開(kāi)百度太麻煩?今天教大家利用Python通過(guò)獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能,用程序直接打開(kāi)網(wǎng)頁(yè),需要的朋友可以參考下2021-06-06