本地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類型的環境。

class jinja2.nativetypes.NativeTemplate([options])?
render(*args: Any, **kwargs: Any) Any?

渲染模板以生成本機python類型。如果結果是單個節點,則返回其值。否則,節點將作為字符串連接起來。如果結果可以用 ast.literal_eval() ,返回已分析的值。否則,將返回字符串。