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