Нативные типы 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.11.x/nativetypes/