原生 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)
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()
进行解析,则返回解析后的值。否则,返回字符串。