Нативные типы 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 | Шаблон) –
- 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 | Тип[Расширение]]) –
- optimized (bool) –
- undefined (Тип[Undefined]) –
- finalize (Вызываемый[[...], Любой] | None) –
- autoescape (bool | Вызываемый[[str | None], bool]) –
- enable_async (bool) –
- Тип возвращаемого значения:
-
render(*args, **kwargs) -
Рендеринг шаблона для получения типа данных Python. Если результатом является единственный узел, возвращается его значение. В противном случае узлы объединяются в строки. Если результат может быть распарсен с помощью
ast.literal_eval(), возвращается распаршенное значение. В противном случае возвращается строка.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://jinja.palletsprojects.com/en/3.1.x/nativetypes/