我們使用乙個簡單的例子切入到jinja2模板引擎,形式最簡單的jinja2模板引擎就是乙個包含響應文字的檔案,例項如下:
最簡單的包含變數的模板引擎例項如下:
預設情況下,flask 在程式資料夾中的templates 子資料夾中尋找模板。在下乙個hello.py版本中,要把前面定義的模板儲存在templates 資料夾中,並分別命名為index.html 和user.html。程式中的檢視函式需要修改一下,以便渲染這些模板:
fromflask import flask,render_template
from
flask.ext.script import manager'/
')def index():
return render_template('
index.html')
'/user/')
def user(name):
return render_template('
user.html
',name=name)
if __name__ == '
__main__':
manager.run()
flask 提供的render_template 函式把jinja2 模板引擎整合到了程式中。render_template 函式的第乙個引數是模板的檔名。隨後的引數都是鍵值對,表示模板中變數對應的真實值。在這段**中,第二個模板收到乙個名為name 的變數。左邊的「name」表示引數名,就是模板中使用的佔位符;右邊的「name」是當前作用域中的變數,表示同名引數的值。
上例中,在模板中使用的} 結構表示乙個變數,它是一種特殊的佔位符,告訴模板引擎這個位置的值從渲染模板時使用的資料中獲取。jinja2 能識別所有型別的變數,甚至是一些複雜的型別,例如列表、字典和物件。在模板中使用變數的一些示例如下:
a value from a dictionary: }.a value from a list: }.
a value from a list, with a variable index: }.
a value from an object
's method: }.
可以使用過濾器修改變數,過濾器名新增在變數名之後,中間使用豎線分隔。例如,下述模板以首字母大寫形式顯示變數name 的值:
hello, }
jinja2 常用的過濾器如下:
safe 過濾器值得特別說明一下。預設情況下,出於安全考慮,jinja2 會轉義所有變數。例如,如果乙個變數的值為' < h1>hello',jinja2 會將其渲染成'',瀏覽器能顯示這個h1 元素,但不會進行解釋。很多情況下需要顯示變數中儲存的html **,這時就可使用safe 過濾器。
jinja2 提供了多種控制結構,可用來改變模板的渲染流程,我們在此只介紹其中最常用的控制結構
下面這個例子展示了如何在模板中使用條件控制語句:
hello, }!
hello, stranger!
另一種常見需求是在模板中渲染一組元素。下例展示了如何使用for 迴圈實現這一需求:
jinja2 還支援巨集。巨集類似於python **中的函式。例如:
}
為了重複使用巨集,我們可以將其儲存在單獨的檔案中,然後在需要使用的模板中匯入
需要在多處重複使用的模板**片段可以寫入單獨的檔案,再包含在所有模板中,以避免重複:
另一種重複使用**的強大方式是模板繼承,它類似於python **中的類繼承。首先,建立乙個名為base.html 的基模板:
block 標籤定義的元素可在衍生模板中修改。在本例中,我們定義了名為head、title 和body 的塊。注意,title 包含在head 中。下面這個示例是基模板的衍生模板:
index
}
extends 指令宣告這個模板衍生自base.html。在extends 指令之後,基模板中的3 個塊被重新定義,模板引擎會將其插入適當的位置。注意新定義的head 塊,在基模板中其內容不是空的,所以使用super() 獲取原來的內容
Flask從入門到精通之flask擴充套件
flask被設計成可擴充套件形式,因此並沒有提供一些重要的功能,比如資料庫和使用者認證,所以開發者可以自由選擇最適合程式的包,或者按需求自行開發。社群成員開發了大量不同用途的擴充套件,如果這還不能滿足需求,你還可使用所有python 標準包或 庫。為了讓你知道如何把擴充套件整合到程式中,接下來我們將...
Flask從入門到精通之flask安裝
安裝flask最簡單的方式是使用虛擬環境,虛擬環境是python直譯器的乙個私有副本,在這個環境中你可以安裝私有包,而且不會影響系統中安裝的全域性的python直譯器。虛擬環境非常有用,可以在系統的python 直譯器中避免包的混亂和版本的衝突。為每個程式單獨建立虛擬環境可以保證程式只能訪問虛擬環境...
Flask從入門到精通之flask程式入門
所有flask程式都必須建立乙個程式例項,web伺服器使用一種名為web伺服器閘道器介面的的協議 wsgi 把接收自客戶端的所有請求 給這個物件處理。程式例項是flask類的物件,使用下面 構建 from flask import flaskflask類的建構函式只有乙個必須指定的引數,即程式主模組...