Flask Web開發(fā)學(xué)習(xí)筆記(二)

本篇文章主要介紹模板的使用。

0.什么是模板

上篇敲的代碼,業(yè)務(wù)邏輯和界面邏輯混雜在一塊,不好理解和維護(hù)。為了讓業(yè)務(wù)邏輯和界面邏輯分開,引入了模板這一概念。

模板是一個包含響應(yīng)文本的文件,其中包含用占位變量表示的動態(tài)部分,其具體值只在請求的上下文中才能知道。

渲染:使用真實(shí)值替換變量,再返回最終得到的響應(yīng)字符串,這一過程稱為渲染。

為了渲染模板,F(xiàn)lask使用了一個名為Jinja2的強(qiáng)大模塊引擎。

1.舉個簡單栗子

0.前提

創(chuàng)建虛擬環(huán)境
激活虛擬環(huán)境
安裝flask

1.創(chuàng)建一個app.py文件,寫入:

from flask import Flask,render_template

app = Flask(__name__)

@app.route('/user/<name>')
def user(name):
return render_template('user.html',user=name)

if __name__ == '__main__':
app.run(debug=True)

解釋下:

from flask import Flask,render_template 這句話,除了引入了Flask,還引入了 render_template。

Flask 提供的 render_template 函數(shù)把 Jinja2 模板集成到了程序中。

render_template 函數(shù),第1個參數(shù)是模板的文件名。隨后的參數(shù)都是鍵值對,表示模板中變量對應(yīng)的真實(shí)值。

render_template('user.html',user=name) user.html表示模板文件名,第2個參數(shù):user=nameuser表示模板中的變量,name表示當(dāng)前函數(shù)user(name)參數(shù)。

2.在app.py文件下創(chuàng)建同級別的templates文件夾

這里需要注明下必須是templates文件夾。默認(rèn)情況下,F(xiàn)lask在程序文件夾中的templates子文件夾中尋找模板。

3.在templates文件夾下創(chuàng)建user.html,寫入:

{% if user %}
<h1>Hello {{ user }}!</h1>
{% else %}
<h1>Hello stranger!</h1>
{% endif %}

解釋下:

{{ user }}結(jié)構(gòu)表示一個變量,它是一個特殊的占位符,告訴模板引擎這個位置的值從渲染。

{% if user %}結(jié)構(gòu),我理解的時表示一種邏輯,記住除了變量{{name}}外都用這個。

4.運(yùn)行

python app.py

在瀏覽器中輸入:http://localhost:5000/user/Tom,得到結(jié)果:Hello Tom!

2.控制結(jié)構(gòu)

0.if else控制結(jié)構(gòu)

{% if user %}
<h1>Hello {{ user }}!</h1>
{% else %}
<h1>Hello stranger!</h1>
{% endif %}

1.for循環(huán)

<ul>
{% for name in names %}
<li>{{ name }}</li>
{% endfor %}
</ul>

解釋下:

names是個數(shù)組變量如:[tom,sam,jim]

2.宏

{% macro render_name(name) %}
<li>{{ name }}</li>
{% endmacro %}

<ul>
{% for name in names %}
{{ render_name(name) }}
{% endfor %}
</ul>

解釋下:

什么是宏,聽起來挺嚇人的。這里的宏類似于Python代碼中的函數(shù)。

{% macro render_name(name) %}定義一個render_name

{{ render_name(name) }}調(diào)用這個宏 注意是{{ }}結(jié)構(gòu)

3.模板繼承

先看下代碼:

0.創(chuàng)建一個base.html

<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} —— 一個簡單Demo</title>
{% endblock  %}
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>

1.創(chuàng)建一個page.html 繼承 base.html

{% extends 'base.html' %}
{% block title %} 測試下 {% endblock  %}
{% block head %}
{{ super()  }}
<style></style>
{% endblock %}
{% block body  %}
<h1>hello world</h1>
{% endblock %}

解釋下:

什么是模板繼承?它類似于Python代碼中的類繼承。

base.html 為基模板。定義了名為head、title和body的塊。注意,title包含在head中。

page.html 為衍生模板。{% extends 'base.html' %}衍生自base.html

注意定義的head塊,在基模板中其內(nèi)容不是空的,所以使用```{{ super() }}``獲取原先的內(nèi)容。

OK,這就是所謂的模板。說些題外話:學(xué)習(xí)一門語言,自認(rèn)為會默寫就OK啦,這和將學(xué)到的東西整理成一篇文章,完全是兩碼事。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容