ネイティブPython型¶
デフォルトのEnvironment
は、テンプレートを文字列にレンダリングします。NativeEnvironment
を使用すると、テンプレートのレンダリングによってネイティブのPython型が生成されます。これは、テキストファイルの作成以外のコンテキストでJinjaを使用する場合に役立ちます。たとえば、ユーザーがテンプレートを使用して値を定義し、その後、従来の文字列環境に渡す中間ステップがある場合があります。
例¶
2つの値を加算すると、数値を含む文字列ではなく整数になります。
>>> env = NativeEnvironment()
>>> t = env.from_string('{{ x + y }}')
>>> result = t.render(x=4, y=2)
>>> print(result)
6
>>> print(type(result))
int
リスト構文をレンダリングすると、リストが生成されます。
>>> t = env.from_string('[{% for item in data %}{{ item + 1 }},{% endfor %}]')
>>> result = t.render(data=range(5))
>>> print(result)
[1, 2, 3, 4, 5]
>>> print(type(result))
list
Pythonリテラルのように見えないものをレンダリングすると、文字列が生成されます。
>>> t = env.from_string('{{ x }} * {{ y }}')
>>> result = t.render(x=4, y=2)
>>> print(result)
4 * 2
>>> print(type(result))
str
Pythonオブジェクトをレンダリングすると、それが唯一のノードである限り、そのオブジェクトが生成されます。
>>> class Foo:
... def __init__(self, value):
... self.value = value
...
>>> result = env.from_string('{{ x }}').render(x=Foo(15))
>>> print(type(result).__name__)
Foo
>>> print(result.value)
15
API¶
- class jinja2.nativetypes.NativeEnvironment([options])¶
テンプレートをネイティブのPython型にレンダリングする環境です。
- パラメーター:
block_start_string (str)
block_end_string (str)
variable_start_string (str)
variable_end_string (str)
comment_start_string (str)
comment_end_string (str)
line_statement_prefix (str | None)
line_comment_prefix (str | None)
trim_blocks (bool)
lstrip_blocks (bool)
newline_sequence (te.Literal['\n', '\r\n', '\r'])
keep_trailing_newline (bool)
optimized (bool)
loader (BaseLoader | None)
cache_size (int)
auto_reload (bool)
bytecode_cache (BytecodeCache | None)
enable_async (bool)
- class jinja2.nativetypes.NativeTemplate([options])¶
- パラメーター:
block_start_string (str)
block_end_string (str)
variable_start_string (str)
variable_end_string (str)
comment_start_string (str)
comment_end_string (str)
line_statement_prefix (str | None)
line_comment_prefix (str | None)
trim_blocks (bool)
lstrip_blocks (bool)
newline_sequence (te.Literal['\n', '\r\n', '\r'])
keep_trailing_newline (bool)
optimized (bool)
enable_async (bool)
- 戻り値:
- render(*args, **kwargs)¶
テンプレートをレンダリングしてネイティブのPython型を生成します。結果が単一のノードである場合、その値が返されます。そうでない場合、ノードは文字列として連結されます。
ast.literal_eval()
で解析できる場合、解析された値が返されます。そうでない場合、文字列が返されます。