ネイティブPythonタイプ—Jinjaドキュメント
ネイティブ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 ] )–
- line_comment_prefix (オプション [ str ] )–
- trim_blocks ( bool )–
- lstrip_blocks ( bool )–
- newline_sequence' ( te.Literal [ \ n 、 [X94X ] \ r \ n 、 \ r ] )–
- keep_trailing_newline ( bool )–
- 拡張機能(シーケンス [ ユニオン [ str 、 タイプ [ 拡張機能 ] ] ] )–
- 最適化( bool )–
- undefined ( Type [ jinja2.runtime.Undefined ] )–
- finalize (オプション [ 呼び出し可能 [ [ ... [ X90X] ] 、 Any ] ] )–
- autoescape ( Union [ bool 、 Callable [ [ オプション [ str ] ] 、 [ X184X] bool ] ] )–
- ローダー(オプション [ BaseLoader ] )–
- cache_size ( int )–
- auto_reload ( bool )–
- bytecode_cache (オプション [ BytecodeCache ] )–
- enable_async ( bool )–
- class jinja2.nativetypes.NativeTemplate([options])
- パラメーター
ソース(ユニオン [ str 、 jinja2.nodes.Template ] )–
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 ] )–
line_comment_prefix (オプション [ str ] )–
trim_blocks ( bool )–
lstrip_blocks ( bool )–
'newline_sequence ( te.Literal [ \ n 、 [X94X ] \ r \ n 、 \ r ] )–
keep_trailing_newline ( bool )–
拡張機能(シーケンス [ ユニオン [ str 、 タイプ [ 拡張機能 ] ] ] )–
最適化( bool )–
undefined ( Type [ jinja2.runtime.Undefined ] )–
finalize (オプション [ 呼び出し可能 [ [ ... [ X90X] ] 、 Any ] ] )–
autoescape ( Union [ bool 、 Callable [ [ オプション [ str ] ] 、 [ X184X] bool ] ] )–
enable_async ( bool )–
- リターンタイプ
どれでも
- render(*args, **kwargs)
テンプレートをレンダリングして、ネイティブPythonタイプを生成します。 結果が単一ノードの場合、その値が返されます。 それ以外の場合、ノードは文字列として連結されます。 結果を
ast.literal_eval()
で解析できる場合は、解析された値が返されます。 それ以外の場合は、文字列が返されます。- パラメーター
args ( Any )–
kwargs ( Any )–
- リターンタイプ
どれでも