Python筆記(Jinja2)

本文是基於Jinja2中文手冊,以及 Jinja2 簡明使用手冊所作的筆記。html

1 Jinja2

Jinja2是基於python的模板引擎,以前在編寫廖雪峯的web開發的時候接觸過,在Day5以及Day8都有涉及到。python

1.1 Environment

Environment是Jinja2中的一個核心類,它的實例用來保存配置全局對象,以及文件路徑用於加載模板。
配置Jinja2來爲應用添加模板的步驟大體是:web

  • 建立Environment實例
  • 使用get_template()加載模板
  • 使用render()方法來渲染模板

1.1.1 建立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

1.1.2 get_template()加載模板,render()方法來渲染模板

在建立好Environment實例後,能夠使用其get_template(templateName)方法來加載模板,再使用render(**dict)渲染模板(通俗點就是變量代入),注意這是一個鏈式env.get_template(templateName).render(**dict),能夠結合day5中的middleware factory中的代碼。markdown

1.2 結構控制標記

在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>
相關文章
相關標籤/搜索