jinja2學習記錄

1、簡介
Jinja2是基於python的模板引擎,功能比較類似於於PHP的smarty,J2ee的Freemarker和velocity。 它能完全支持unicode,並具有集成的沙箱執行環境,應用廣泛。jinja2使用BSD授權。它是Python下一個被廣泛應用的模版引擎,他的設計思想來源於Django的模板引擎,並擴展了其語法和一系列強大的功能。其中最顯著的一個是增加了沙箱執行功能和可選的自動轉義功能,這對大多應用的安全性來說是非常重要的。他基於unicode並能在python2.4之後的版本運行,包括python3。
2、特性
(1)沙箱執行模式,模板的每個部分都在引擎的監督之下執行,模板將會被明確地標記在白名單或黑名單內,這樣對於那些不信任的模板也可以執行。
(2)強大的自動HTML轉義系統,可以有效地阻止跨站腳本攻擊。
(3)模板繼承機制,此機制可以使得所有的模板都具有相似一致的佈局,也方便了開發人員對模板的修改和管理。
(4)高效的執行效率,Jinja2引擎在模板第一次加載時就把源碼轉換成Python字節碼,加快模板執行時間。
(5)可選的預編譯模式。
(6)調試系統融合了標準的Python的TrackBack系統,使得模板編譯和運行期間的錯誤能及時被發現和調試。
(7)語法可配置,可以重新配置Jinja2使得它更好地適應LaTeX或JavaScript的輸出。
(8)模板設計人員幫助手冊,此手冊指導設計人員更好地使用Jinja2引擎的各種方法。
3、模板
要了解jinja2,則需瞭解模板的概念。模板在python的web開發中廣泛使用,能夠有效的將業務邏輯和頁面邏輯分開,使代碼的可讀性增強,並且更加容易理解和維護。
模板簡單來說就是一個其中包含佔位變量表示動態的部分的文件,模板文件在經過動態賦值後,返回給用戶(可以將其理解爲渲染)
python中自帶一個簡單的模板,就是string提供的

import string
a = string.Template("$hello $world")
a.substitute(hello = 'love',world = 'you')
output is : 'love you'

python自帶的模板功能及其有限,如果我們想要在模板中使用控制語句、表達式以及繼承功能,則無法實現。目前主流的模板系統爲常用的jinja2和mako。
4、安裝
jinja2安裝過程與平常python安裝包安裝過程沒有什麼不同,這裏不再贅述。使用pip install 或者conda install安裝即可
5、jinja2語法
(1)在jinja2中,存在三種語法:
1)控制結構{% %} ;2)變量取值{{}};3)註釋{# #}
一個簡單的jinja2例子

{# This is jinja code
	{% for i in range(5) %}
	...
	{% endfor %}
#}

可以看到,for循環的使用方式和Python比較類似,但是沒有了句尾的冒號,另外需要使用endfor最爲結尾,其實在jinja2中,if也是一樣的,結尾需要使用endif。
(2)jinja2變量
jinja2模板中使用 {{ }} 語法表示一個變量,它是一種特殊的佔位符。當利用jinja2進行渲染的時候,它會把這些特殊的佔位符進行填充/替換,jinja2支持python中所有的Python數據類型比如列表、字段、對象等。
6、利用jinja2進行渲染
jinja2模塊中有一個名爲Environment的類,這個類的實例用於存儲配置和全局對象,然後從文件系統或其他位置加載模板。
(1)基本使用方法
大多數應用都在初始化時存在一個Environment對象,並用它加載模板。Environment支持兩種加載方式:
1)PackageLoader:包加載器
使用包加載器來加載文檔最簡單的方式如下:

from jinja2 import PackageLoader,Environment
env = Environment(loader = PackageLoader('python_project','templates')) #創建一個包加載器對象
template = env.get_template('bast.heml') #獲取一個模板文件
template.render(name='jinja',age=18) #渲染

其中:PackageLoader()的兩個參數爲:python包的名稱,以及模板目錄名稱。;get_template():獲取模板目錄下的某個具體文件;render():接受變量,對模板進行渲染
2)FileSystemLoader:文件加載器
文件系統加載器,不需要模板文件存在某個python包下,可以直接訪問系統中的文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章