當前位置:成語大全網 - 書法字典 - 在Python中使用HTML模板的教程

在Python中使用HTML模板的教程

本文主要介紹在Python中使用HTML模板的教程。HTML模板也是Python各大框架下的基礎功能,有需要的朋友可以參考壹下。Web框架把我們從WSGI中拯救了出來。現在只需要不停的寫函數,帶上URL,就可以繼續Web App的開發了。

但是Web App不僅僅是處理邏輯,展現給用戶的頁面也很重要。返回函數中包含HTML的字符串。壹個簡單的頁面還可以,但是考慮到新浪首頁6000多行HTML,妳確定用Python的string能寫對嗎?反正我做不到。

俗話說,不懂前端的Python工程師不是好的產品經理。有Web開發經驗的同學都知道,Web App最復雜的部分就是HTML頁面。HTML不僅要正確,還要通過CSS和復雜的JavaScript腳本來美化,實現各種交互和動畫效果。簡而言之,生成HTML頁面非常困難。

因為用Python代碼拼寫字符串不現實,模板技術就出現了。

使用模板,我們需要預先準備壹個HTML文檔。這個HTML文檔不是普通的HTML,而是嵌入了壹些變量和指令。然後根據我們傳入的數據,經過替換,得到最終的HTML並發送給用戶:

這就是傳說中的MVC:模型-視圖-控制器,中文名字叫“模型-視圖-控制器”。

Python處理URL的函數是C: Controller,負責業務邏輯,比如檢查用戶名是否存在,取出用戶信息。

包含變量{{ name }}的模板是V: View,負責顯示邏輯。通過簡單地替換壹些變量,View的最終輸出就是用戶看到的HTML。

MVC中的模型在哪裏?模型用來傳遞給視圖,這樣當視圖替換變量時,就可以從模型中檢索相應的數據。

在上面的例子中,模型是壹個字典:

{姓名:邁克爾}

正因為Python支持關鍵字參數,所以很多Web框架都允許妳傳入關鍵字參數,然後在框架內部組裝壹個dict作為模型。

現在,我們以最後壹個直接輸出的字符串作為HTML的例子,用高端大氣上檔次的MVC模式重寫:

16

17

18

19

20

21

22

從燒瓶導入燒瓶,請求,渲染_模板

app = Flask(__name__)

@app.route(/,methods=[GET,POST])

def home():

返回render_template(home.html)

@app.route(/signin,methods=[GET])

定義登錄表單():

返回render_template(form.html)

@app.route(/signin,methods=[POST])

定義登錄():

用戶名= request . form[用戶名]

password = request . form[password]

如果用戶名= =管理員,密碼= =密碼:

返回render_template(signin-ok.html,username=username)

返回render_template(form.html,message =錯誤的用戶名或密碼,username =用戶名)

if _ _ name _ _ = = _ _ main _ _:

app.run()

Flask通過render_template()函數實現模板渲染。與Web框架類似,Python模板也有很多種。Flask默認支持的模板是jinja2,我們先直接安裝jinja2:

1

$ easy_install jinja2

然後,開始編寫jinja2模板:

1

home.html

用於顯示主頁的模板:

11

超文本標記語言

標題主頁/標題

/頭

身體

h 1 style = font-style:italic home/h 1

/body

/html

form.html

用於顯示登錄表單的模板:

16

17

18

超文本標記語言

title請登錄/title

/頭

身體

{% if消息%}

p style=color:red{{ message }}/p

{% endif %}

表單操作=/登錄方法=發布

legend請登錄:/legend

pinput name =用戶名placeholder =用戶名value={{用戶名}}/p

p輸入名稱=密碼占位符=密碼類型=密碼/p

p按鈕類型=提交登錄/按鈕/p

/表單

/body

/html

signin-ok.html

成功登錄的模板:

超文本標記語言

title歡迎,{{用戶名}}/title

/頭

身體

歡迎光臨,{{用戶名}}!/p

/body

/html

登錄失敗的模板怎麽辦?我們給form.html添加了壹點條件判斷,並重用form.html作為登錄失敗的模板。

最後,確保將模板放在正確的模板目錄中。templates和app.py在同壹個目錄中:

使用模板啟動python app.py查看頁面效果:

通過MVC,我們在Python代碼中處理M: model和C: controller,而V: view是通過模板處理的,所以我們最大程度上成功地將Python代碼和HTML代碼分離開來。

使用模板的另壹個好處是容易修改,保存後刷新瀏覽器就能看到最新的效果,這對調試HTML、CSS、JavaScript的前端工程師來說真的很重要。

在Jinja2模板中,我們使用{{ name }}來表示需要替換的變量。很多時候需要循環、條件判斷等指令語句。在Jinja2中,指令用{%表示...%}.

例如,循環輸出頁碼:

1

2

{% for i in page_list %}

a href=/page/{{ i }}{{ i }}/a

{% endfor %}

如果page_list是壹個列表:[1,2,3,4,5],上面的模板會輸出5個超鏈接。

除了Jinja2,常見的模板還包括:

櫻井真子:使用帶有${xxx}的模板;

獵豹:也是帶有${xxx}的模板;

Django:Django是壹個壹站式框架,帶有壹個帶有{%的模板...%}和{{ xxx }}。

總結

使用MVC,我們將Python代碼與HTML代碼分開。HTML代碼全部放在模板裏,寫起來效率更高。