本文是基於Jinja2中文手冊,以及 Jinja2 簡明使用手冊所作的筆記。html
Jinja2是基於python的模板引擎,以前在編寫廖雪峯的web開發的時候接觸過,在Day5以及Day8都有涉及到。python
Environment
類Environment
是Jinja2中的一個核心類,它的實例用來保存配置、全局對象,以及文件路徑用於加載模板。
配置Jinja2來爲應用添加模板的步驟大體是:web
Environment
實例get_template()
加載模板render()
方法來渲染模板Environment
實例如今結合廖雪峯的web開發實戰一同說明,在Day5構建web框架的時候就有初始化Jinja2模板,這步驟就至關於建立Environment
實例,建立Environment
實例須要接受主要參數有(基本都有默認值):api
loader
:模板加載器,形式是loader=FileSystemLoader(path)
,其中的path
表示的是模板的文件路徑。block_start_string
:模塊開始標記符,默認值{%
block_end_string
:模塊結束標記符,默認值%}
variable_start_string
:變量開始標記符,默認值{{
variable_end_string
:變量結束標記符,默認值}}
auto_reload
:是一個布爾值,若是設定爲True
,則當模板發生改動時會自動重載autoescape
:是一個布爾值,默認值爲False
,若是設置爲True
,在渲染模板時,會自動將模板轉義實體字符,此時使用safe
過濾器能夠使不需轉義的渲染變量不轉義,如{{ user.username|safe }}
filters
:過濾器,多數用於渲染變量標記符的時候,在渲染模板時其語法形式是{{args|function}}
(結合day8中的時間過濾器)。過濾器不是建立Environment
實例的參數,它是以方法的形式綁定在Environment
實例上,如Env.filters[FunctionName]=function
get_template()
加載模板,render()
方法來渲染模板在建立好Environment
實例後,能夠使用其get_template(templateName)
方法來加載模板,再使用render(**dict)
來渲染模板(通俗點就是變量代入),注意這是一個鏈式env.get_template(templateName).render(**dict)
,能夠結合day5中的middleware factory
中的代碼。markdown
在Jinja2模板中渲染的目標以結構控制標記符來定義,結構標記符基本有如下幾種:框架
{{ variable }}
:用於直接替換傳入數據{% extends '__base__.html' %}
:用於子模板繼承父模板{% block blockName %}...{% endblock %}
:用於父模板與子模版之間的渲染,注意blockName
的命名必須是惟一的{% if boolean %}...{% elseif boolean %}...{% else %}...{% endif %}
:條件判斷標記{% for item in items %}
:循環控制標記{% marco function(x) %}..function..{% endmarco %}
:宏,用於定義函數,此後該模板任意部位均可以直接調用functon(x)
,如<p>{{function(123)}}</p>