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
のインスタンスを手動で作成するのではなく、template_path
Application
設定に基づいてテンプレートを自動的に読み込むrender
メソッドとrender_string
メソッドをtornado.web.RequestHandler
で使用します。
_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
を使用するテンプレートには、親テンプレートの内容を置き換える1つ以上のblock
タグを含める必要があります。block
タグに含まれていない子テンプレートのものはすべて無視されます。{% block %}
タグの例を参照してください。{% for *var* in *expr* %}...{% end %}
Pythonの
for
文と同じです。{% break %}
と{% continue %}
をループ内で使用できます。{% from *x* import *y* %}
Pythonの
import
文と同じです。{% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}
条件文 - 条件が真である最初のセクションを出力します。(
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)[source]¶
コンパイル済みのテンプレートです。
与えられた`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)[source]¶
テンプレートローダーの基底クラスです。
{% extends %}
や{% include %}
のようなテンプレート構成を使用するには、テンプレートローダーを使用する必要があります。ローダーは、テンプレートが最初に読み込まれた後に、すべてのテンプレートをキャッシュします。テンプレートローダーを構築します。
- パラメータ
autoescape (str) – テンプレート名前空間内の関数名(例:「xhtml_escape」)、またはデフォルトで自動エスケープを無効にする場合は
None
。namespace (dict) – デフォルトのテンプレート名前空間に追加する辞書、または
None
。whitespace (str) – テンプレートの空白に関するデフォルトの動作を指定する文字列。オプションについては
filter_whitespace
を参照してください。`.html`と`.js`で終わるファイルの場合は「single」、その他のファイルの場合は「all」がデフォルトです。
バージョン4.3での変更:
whitespace
パラメータを追加しました。
- class tornado.template.Loader(root_directory: str, **kwargs: Any)[source]¶
単一のルートディレクトリからテンプレートを読み込むテンプレートローダーです。
- class tornado.template.DictLoader(dict: Dict[str, str], **kwargs: Any)[source]¶
辞書からテンプレートを読み込むテンプレートローダーです。