国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 在Python中使用HTML模板的教程

在Python中使用HTML模板的教程

2020-06-17 10:48廖雪峰 Python

這篇文章主要介紹了在Python中使用HTML模板的教程,HTML模板也是Python的各大框架下的一個基本功能,需要的朋友可以參考下

Web框架把我們從WSGI中拯救出來了。現在,我們只需要不斷地編寫函數,帶上URL,就可以繼續Web App的開發了。

但是,Web App不僅僅是處理邏輯,展示給用戶的頁面也非常重要。在函數中返回一個包含HTML的字符串,簡單的頁面還可以,但是,想想新浪首頁的6000多行的HTML,你確信能在Python的字符串中正確地寫出來么?反正我是做不到。

俗話說得好,不懂前端的Python工程師不是好的產品經理。有Web開發經驗的同學都明白,Web App最復雜的部分就在HTML頁面。HTML不僅要正確,還要通過CSS美化,再加上復雜的JavaScript腳本來實現各種交互和動畫效果。總之,生成HTML頁面的難度很大。

由于在Python代碼里拼字符串是不現實的,所以,模板技術出現了。

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

在Python中使用HTML模板的教程

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

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

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

MVC中的Model在哪?Model是用來傳給View的,這樣View在替換變量的時候,就可以從Model中取出相應的數據。

上面的例子中,Model就是一個dict:

{ 'name': 'Michael' }

只是因為Python支持關鍵字參數,很多Web框架允許傳入關鍵字參數,然后,在框架內部組裝出一個dict作為Model。

現在,我們把上次直接輸出字符串作為HTML的例子用高端大氣上檔次的MVC模式改寫一下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from flask import Flask, request, render_template
 
app = Flask(__name__)
 
@app.route('/', methods=['GET', 'POST'])
def home():
 return render_template('home.html')
 
@app.route('/signin', methods=['GET'])
def signin_form():
 return render_template('form.html')
 
@app.route('/signin', methods=['POST'])
def signin():
 username = request.form['username']
 password = request.form['password']
 if username=='admin' and password=='password':
  return render_template('signin-ok.html', username=username)
 return render_template('form.html', message='Bad username or password', username=username)
 
if __name__ == '__main__':
 app.run()

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

?
1
$ easy_install jinja2

然后,開始編寫jinja2模板:

?
1
home.html

用來顯示首頁的模板:

?
1
2
3
4
5
6
7
8
9
10
11
<html>
<head>
 <title>Home</title>
</head>
<body>
 <h1 style="font-style:italic">Home</h1>
</body>
</html>
 
 
form.html

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
 <title>Please Sign In</title>
</head>
<body>
 {% if message %}
 <p style="color:red">{{ message }}</p>
 {% endif %}
 <form action="/signin" method="post">
 <legend>Please sign in:</legend>
 <p><input name="username" placeholder="Username" value="{{ username }}"></p>
 <p><input name="password" placeholder="Password" type="password"></p>
 <p><button type="submit">Sign In</button></p>
 </form>
</body>
</html>
 
signin-ok.html

登錄成功的模板:

?
1
2
3
4
5
6
7
8
<html>
<head>
 <title>Welcome, {{ username }}</title>
</head>
<body>
 <p>Welcome, {{ username }}!</p>
</body>
</html>

登錄失敗的模板呢?我們在form.html中加了一點條件判斷,把form.html重用為登錄失敗的模板。

最后,一定要把模板放到正確的templates目錄下,templates和app.py在同級目錄下:

在Python中使用HTML模板的教程

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

在Python中使用HTML模板的教程

通過MVC,我們在Python代碼中處理M:Model和C:Controller,而V:View是通過模板處理的,這樣,我們就成功地把Python代碼和HTML代碼最大限度地分離了。

使用模板的另一大好處是,模板改起來很方便,而且,改完保存后,刷新瀏覽器就能看到最新的效果,這對于調試HTML、CSS和JavaScript的前端工程師來說實在是太重要了。

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

比如循環輸出頁碼:

?
1
2
3
{% for i in page_list %}
 <a href="/page/{{ i }}">{{ i }}</a>
{% endfor %}

如果page_list是一個list:[1, 2, 3, 4, 5],上面的模板將輸出5個超鏈接。

除了Jinja2,常見的模板還有:

  •     Mako:用<% ... %>和${xxx}的一個模板;
  •     Cheetah:也是用<% ... %>和${xxx}的一個模板;
  •     Django:Django是一站式框架,內置一個用{% ... %}和{{ xxx }}的模板。

小結

有了MVC,我們就分離了Python代碼和HTML代碼。HTML代碼全部放到模板里,寫起來更有效率。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久夜色精品国产 | 欧美a在线| 日日夜夜草草 | 九九视频在线 | 中文字幕影院 | 美女视频一区二区三区 | 精品久| 中文字幕在线免费 | 日韩成人一区 | 性欧美另类 | 羞羞网站在线 | 爱爱视频网址 | 久久精品国产亚洲一区二区三区 | 色综合天天综合网国产成人综合天 | 一级黄免费看 | 精品欧美乱码久久久久久1区2区 | 在线小视频 | 色网综合 | 欧美成人专区 | 国产精品国产三级国产aⅴ中文 | 亚洲精品大片 | 一区二区三区国产在线 | 亚洲国产精品久久久久久6q | 欧美大黄大色一级毛片 | av软件在线 | 欧美一区二区三区在线 | 久久精品视频网站 | 欧美国产一区二区三区 | 亚洲精品久久久久久动漫 | 中文字幕精品一区二区精品 | 午夜爽 | 色网视频 | 国产精品18久久久久久首页狼 | 亚洲一区高清 | 91 在线| 日本不卡免费新一二三区 | 日韩一区二区三区电影在线观看 | 色九区| 国产精品久久久久久久久久ktv | 婷婷精品久久久久久久久久不卡 | av在线免费播放 |