摘要:用瀏覽器訪問(wèn)這個(gè)地址,顯示結(jié)果如下那么為何稱之為模板呢因?yàn)椴粌H能渲染靜態(tài)的文件,也能傳遞參數(shù)給,使一個(gè)模板根據(jù)參數(shù)的不同顯示不同的內(nèi)容,這是因?yàn)槭褂昧诉@個(gè)模板引擎。
我們之前的視圖函數(shù),返回的都是簡(jiǎn)單的"Hello Wolrd"之類的字符串,怎么返回一個(gè)html呢?首先我們?cè)趖emplates文件夾建立一個(gè)html文件,內(nèi)容隨便寫一點(diǎn)如下:
Index This is index page
我們可以使用Flask對(duì)象app的send_static_file方法,使視圖函數(shù)返回一個(gè)靜態(tài)的html文件,但現(xiàn)在我們不使用這種方法,而是使用flask的render_template函數(shù),它功能更強(qiáng)大。
從flask中導(dǎo)入render_template,整體代碼如下:
from flask import Flask, render_template import config app = Flask(__name__) app.config.from_object(config) @app.route("/") def index(): return render_template("index.html") if __name__ == "__main__": app.run()
render_template函數(shù)會(huì)自動(dòng)在templates文件夾中找到對(duì)應(yīng)的html,因此我們不用寫完整的html文件路徑。用瀏覽器訪問(wèn)"/"這個(gè)地址,顯示結(jié)果如下:
那么為何稱之為模板呢?因?yàn)?b>render_template不僅能渲染靜態(tài)的html文件,也能傳遞參數(shù)給html,使一個(gè)html模板根據(jù)參數(shù)的不同顯示不同的內(nèi)容,這是因?yàn)閒lask使用了jinja2這個(gè)模板引擎。要使用模板,在render_template參數(shù)中以key=value形式傳入變量,在html中使用{{key}}來(lái)顯示傳入的變量,例如:
# 視圖函數(shù) @app.route("/") def index(): return render_template("index.html", contents="This is index page") # htmlIndex {{ contents }}
瀏覽器顯示的結(jié)果與上文是一樣的。我們還可以直接把一個(gè)類的實(shí)例傳遞過(guò)去,并在模板中訪問(wèn)類的屬性,例如假設(shè)一個(gè)類對(duì)象obj有a和b屬性,關(guān)鍵部分的代碼如下:
# 視圖函數(shù)中 return render_template("index.html", object=obj) ... # html中a: {{ object.a }}
b: {{ object.b }}
傳入一個(gè)字典也可以,并且在模板中既可以用dict[key],也可以用dict.key。
使用過(guò)濾器,可以在html中對(duì)傳入的變量進(jìn)行處理,其格式是{{ 變量 | 過(guò)濾器 }},例如將前文的{{ contents }}修改為{{ contents | upper}},瀏覽器顯示的內(nèi)容就變成了:
所以我們可以很容易就理解,過(guò)濾器其實(shí)就是以變量為參數(shù)的函數(shù),返回處理后的結(jié)果,在后端一樣可以先用字符串對(duì)象的upper()函數(shù)處理好再傳遞給模板,效果是完全一樣的。jinja2自帶了一些過(guò)濾器,例如length/reverse/lower等等 ,并且我們也可以自己按照需求自定義過(guò)濾器,模板還支持{{ 變量 | 過(guò)濾器1 | 過(guò)濾器2 | ... }}這樣的操作。想要深入了解的話,可以搜索jinja2過(guò)濾器去進(jìn)一步學(xué)習(xí)。
模板中還可以使用if else和for in控制語(yǔ)句,與變量使用{{ }}不同,控制語(yǔ)句要放在{% %}里,例如前文的contents傳入一個(gè)list:
contents=[i for i in range(10)]
html中代碼如下:
{% for i in contents %} {{ i }}{# 注意i也要用兩個(gè)大括號(hào) #} {% endfor %}
使用for遍歷contents的內(nèi)容,并用{{ i }}顯示出來(lái),同時(shí)還用{# #}加了一個(gè)注釋,還要注意需要使用{% endfor %}來(lái)提示循環(huán)區(qū)域的結(jié)束,因?yàn)閔tml不像python那樣通過(guò)縮進(jìn)來(lái)判斷循環(huán)的區(qū)域,if也是同理。瀏覽器顯示結(jié)果:
最后for和if結(jié)合使用:
header
{% for i in contents %}{% if i%2 == 0 %} {{ i }}是偶數(shù){# 注意i也要用兩個(gè)大括號(hào) #} {% else %} {{ i }}是奇數(shù) {% endif %}
{% endfor %}
結(jié)果如下(只是演示一下,不要吐槽排版和美觀):
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41243.html
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。 1.配置開(kāi)發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(huì)有不同的環(huán)境,如開(kāi)發(fā)環(huán)境、生...
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。 1.配置開(kāi)發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(huì)有不同的環(huán)境,如開(kāi)發(fā)環(huán)境、生...
摘要:用真實(shí)的值替換變量并返回最終響應(yīng)字符串,這個(gè)過(guò)程稱為渲染。示例展示模板實(shí)現(xiàn)該響應(yīng)。控制結(jié)構(gòu)提供一些控制結(jié)構(gòu)用于改變模板流。這個(gè)示例展示如何使用循環(huán)做到這些同樣支持宏,這和代碼中的函數(shù)很像。 寫代碼最關(guān)鍵的是要易于維護(hù)且結(jié)構(gòu)清晰整潔。目前為止,你看到的例子都過(guò)于簡(jiǎn)單從而沒(méi)有做這方面的要求。Flask視圖函數(shù)希望將兩個(gè)應(yīng)該完全獨(dú)立的任務(wù)一并處理,兩個(gè)任務(wù)有兩種代碼,一并處理勢(shì)必會(huì)引發(fā)問(wèn)題。...
摘要:注模板包含不存在此問(wèn)題。在模板中,使用過(guò)濾器顯式地標(biāo)記一個(gè)字符串為安全的臨時(shí)地完全禁用自動(dòng)轉(zhuǎn)義系統(tǒng)。通過(guò)在聲明中直接添加或,當(dāng)前的上下文可以傳遞到模板,而且不會(huì)自動(dòng)禁用緩存。 官網(wǎng):http://jinja.pocoo.org/docs/dev/中文文檔:http://docs.jinkan.org/docs/j...當(dāng)前版本2.8 安裝:pip install Jinja2Flask...
摘要:處理和函數(shù)之間關(guān)系的程序稱為路由。模板引擎是由實(shí)現(xiàn)的是內(nèi)置的模板語(yǔ)言參照設(shè)計(jì)思想設(shè)計(jì)的,跟差不多渲染模板默認(rèn)情況下,在程序文件夾中的子文件夾中尋找模板。如果需要可在文件夾中使用子文件夾存放文件。 1 程序的基本結(jié)構(gòu) 1.1初始化 所有Flask 程序都必須創(chuàng)建一個(gè)程序?qū)嵗eb 服務(wù)器使用一種名為Web 服務(wù)器網(wǎng)關(guān)接口(Web Server Gateway Interface,WSG...
閱讀 2197·2021-11-25 09:43
閱讀 1165·2021-11-23 09:51
閱讀 3499·2021-11-23 09:51
閱讀 3629·2021-11-22 09:34
閱讀 1543·2021-10-09 09:43
閱讀 2119·2019-08-30 15:53
閱讀 3161·2019-08-30 14:07
閱讀 568·2019-08-28 18:14