Нативные типы 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, **kwargs) -
Преобразует шаблон в нативный тип Python. Если результат — единственный узел, возвращается его значение. В противном случае узлы конкатенируются как строки. Если результат может быть проанализирован с помощью
ast.literal_eval(), возвращается проанализированное значение. В противном случае возвращается строка.
-
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://jinja.palletsprojects.com/en/2.10.x/nativetypes/