本地python类型

默认值 Environment 将模板呈现为字符串。用 NativeEnvironment ,呈现模板将生成本机python类型。如果您在创建文本文件的上下文之外使用jinja,这将非常有用。例如,您的代码可能有一个中间步骤,在该步骤中,用户可以使用模板定义值,然后将这些值传递给传统的字符串环境。

实例

添加两个值会得到一个整数,而不是一个带数字的字符串:

>>> 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) --

  • extensions (Sequence[str | Type[Extension]]) --

  • optimized (bool) --

  • undefined (Type[Undefined]) --

  • finalize (Callable[[...], Any] | None) --

  • autoescape (bool | Callable[[str | None], bool]) --

  • loader (BaseLoader | None) --

  • cache_size (int) --

  • auto_reload (bool) --

  • bytecode_cache (BytecodeCache | None) --

  • enable_async (bool) --

class jinja2.nativetypes.NativeTemplate([options])
参数:
  • source (str | 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 | None) --

  • line_comment_prefix (str | None) --

  • trim_blocks (bool) --

  • lstrip_blocks (bool) --

  • newline_sequence (te.Literal['\n', '\r\n', '\r']) --

  • keep_trailing_newline (bool) --

  • extensions (Sequence[str | Type[Extension]]) --

  • optimized (bool) --

  • undefined (Type[Undefined]) --

  • finalize (Callable[[...], Any] | None) --

  • autoescape (bool | Callable[[str | None], bool]) --

  • enable_async (bool) --

返回类型:

Any

render(*args, **kwargs)

渲染模板以生成本机python类型。如果结果是单个节点,则返回其值。否则,节点将作为字符串连接起来。如果结果可以用 ast.literal_eval() ,返回已分析的值。否则,将返回字符串。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Any