tornado.template
— 彈性輸出產生¶
一個簡單的範本系統,將範本編譯成 Python 程式碼。
基本用法如下
t = template.Template("<html>{{ myvalue }}</html>")
print(t.generate(myvalue="XXX"))
Loader
是一個從根目錄載入範本並快取已編譯範本的類別
loader = template.Loader("/home/btaylor")
print(loader.load("test.html").generate(myvalue="XXX"))
我們將所有範本編譯為原始 Python。錯誤回報目前…呃,很有趣。範本的語法
### base.html
<html>
<head>
<title>{% block title %}Default title{% end %}</title>
</head>
<body>
<ul>
{% for student in students %}
{% block student %}
<li>{{ escape(student.name) }}</li>
{% end %}
{% end %}
</ul>
</body>
</html>
### bold.html
{% extends "base.html" %}
{% block title %}A bolder title{% end %}
{% block student %}
<li><span style="bold">{{ escape(student.name) }}</span></li>
{% end %}
與大多數其他範本系統不同,我們不對您可以包含在語句中的表達式施加任何限制。if
和 for
區塊會直接翻譯成 Python,因此您可以執行複雜的表達式,例如
{% for student in [p for p in people if p.student and p.age > 23] %}
<li>{{ escape(student.name) }}</li>
{% end %}
直接翻譯成 Python 意味著您可以輕鬆地將函式應用於表達式,例如上述範例中的 escape()
函式。您可以將函式像任何其他變數一樣傳遞到您的範本中(在 RequestHandler
中,覆寫 RequestHandler.get_template_namespace
)
### Python code
def add(x, y):
return x + y
template.execute(add=add)
### The template
{{ add(1, 2) }}
我們預設為所有範本提供函式 escape()
、url_escape()
、json_encode()
和 squeeze()
。
典型的應用程式不會手動建立 Template
或 Loader
實例,而是使用 render
和 render_string
方法的 tornado.web.RequestHandler
,它會根據 template_path
Application
設定自動載入範本。
以 _tt_
開頭的變數名稱由範本系統保留,應用程式程式碼不應使用。
語法參考¶
範本表達式以雙大括號括住:{{ ... }}
。內容可以是任何 Python 表達式,它會根據目前的自動跳脫設定進行跳脫,並插入到輸出中。其他範本指令使用 {% %}
。
若要註解掉一段程式碼使其從輸出中省略,請用 {# ... #}
括住。
若要在輸出中包含文字 {{
、{%
或 {#
,請分別將它們跳脫為 {{!
、{%!
和 {#!
。
{% apply *function* %}...{% end %}
將函式應用於
apply
和end
之間的所有範本程式碼的輸出{% apply linkify %}{{name}} said: {{message}}{% end %}
請注意,作為實作細節,apply 區塊是以巢狀函式的方式實作,因此可能會與透過
{% set %}
設定的變數,或迴圈內使用{% break %}
或{% continue %}
產生奇怪的互動。{% autoescape *function* %}
設定目前檔案的自動跳脫模式。這不會影響其他檔案,即使是透過
{% include %}
參照的檔案。請注意,自動跳脫也可以在Application
或Loader
中進行全域設定。{% autoescape xhtml_escape %} {% autoescape None %}
{% block *name* %}...{% end %}
指示一個命名的、可替換的區塊,用於
{% extends %}
。父範本中的區塊將被子範本中相同名稱的區塊的內容取代。<!-- base.html --> <title>{% block title %}Default title{% end %}</title> <!-- mypage.html --> {% extends "base.html" %} {% block title %}My page title{% end %}
{% comment ... %}
一個將從範本輸出中移除的註解。請注意,沒有
{% end %}
標籤;註解從comment
這個詞到結束的%}
標籤。{% extends *filename* %}
從另一個範本繼承。使用
extends
的範本應包含一個或多個block
標籤,以取代父範本中的內容。子範本中未包含在block
標籤中的任何內容都將被忽略。有關範例,請參閱{% block %}
標籤。{% for *var* in *expr* %}...{% end %}
與 Python 的
for
語句相同。迴圈內可以使用{% break %}
和{% continue %}
。{% from *x* import *y* %}
與 Python 的
import
語句相同。{% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}
條件語句 - 輸出條件為 true 的第一個區段。(
elif
和else
區段是可選的){% import *module* %}
與 Python 的
import
語句相同。{% include *filename* %}
包含另一個範本檔案。包含的檔案可以像直接複製到
include
指令的位置一樣看到所有區域變數({% autoescape %}
指令是例外)。或者,可以使用{% module Template(filename, **kwargs) %}
來包含另一個具有隔離命名空間的範本。{% module *expr* %}
渲染一個
UIModule
。UIModule
的輸出不會被跳脫。{% module Template("foo.html", arg=42) %}
UIModules
是tornado.web.RequestHandler
類別 (特別是它的render
方法) 的一個功能,當模板系統單獨在其他情境中使用時,它將不會運作。{% raw *expr* %}
輸出給定表達式的結果,不進行自動跳脫。
{% set *x* = *y* %}
設定一個區域變數。
{% try %}...{% except %}...{% else %}...{% finally %}...{% end %}
與 Python 的
try
陳述式相同。{% while *condition* %}... {% end %}
與 Python 的
while
陳述式相同。{% break %}
和{% continue %}
可以在迴圈內使用。{% whitespace *mode* %}
設定目前檔案剩餘部分的空白模式 (或直到下一個
{% whitespace %}
指令)。請參閱filter_whitespace
以取得可用的選項。Tornado 4.3 新增。
類別參考¶
- class tornado.template.Template(template_string, name='<string>', loader=None, compress_whitespace=None, autoescape='xhtml_escape', whitespace=None)[原始碼]¶
一個已編譯的模板。
我們從給定的 template_string 編譯成 Python。您可以使用 generate() 從變數產生模板。
建構一個 Template。
- 參數
template_string (str) – 模板檔案的內容。
name (str) – 模板載入的檔案名稱 (用於錯誤訊息)。
loader (tornado.template.BaseLoader) – 負責此模板的
BaseLoader
,用於解析{% include %}
和{% extend %}
指令。compress_whitespace (bool) – 自 Tornado 4.3 起已棄用。如果為 true,則等同於
whitespace="single"
,如果為 false,則等同於whitespace="all"
。autoescape (str) – 模板命名空間中函數的名稱,或
None
以停用預設的跳脫。whitespace (str) – 指定空白處理的字串;請參閱
filter_whitespace
以取得選項。
在 4.3 版變更: 新增
whitespace
參數;已棄用compress_whitespace
。
- class tornado.template.BaseLoader(autoescape: str = 'xhtml_escape', namespace: Optional[Dict[str, Any]] = None, whitespace: Optional[str] = None)[原始碼]¶
模板載入器的基底類別。
您必須使用模板載入器才能使用模板結構,例如
{% extends %}
和{% include %}
。載入器會在第一次載入後快取所有模板。建構一個模板載入器。
- 參數
autoescape (str) – 模板命名空間中函數的名稱,例如「xhtml_escape」,或
None
以停用預設的自動跳脫。namespace (dict) – 要新增至預設模板命名空間的字典,或
None
。whitespace (str) – 指定模板中空白預設行為的字串;請參閱
filter_whitespace
以取得選項。對於以「.html」和「.js」結尾的檔案,預設為「single」,對於其他檔案則為「all」。
在 4.3 版變更: 新增
whitespace
參數。