Spec-Zone.ru › Jinja 3.0

Расширения

Jinja поддерживает расширения, которые могут добавлять дополнительные фильтры, тесты, глобальные переменные или даже расширять парсер. Основная мотивация расширений — перенести часто используемый код в повторно используемый класс, например, добавив поддержку локализации.

Добавление расширений

Расширения добавляются к среде Jinja во время создания. Для добавления расширения передайте список классов расширений или имён путей импорта в параметр extensions конструктора Environment. Следующий пример создаёт среду Jinja с загруженным расширением i18n:

jinja_env = Environment(extensions=['jinja2.ext.i18n'])

Для добавления расширений после создания используйте метод add_extension():

jinja_env.add_extension('jinja2.ext.debug')

Расширение i18n

Имя импорта: jinja2.ext.i18n

Расширение i18n можно использовать в сочетании с gettext или Babel. При его включении Jinja предоставляет инструкцию trans для пометки блока как переводимого и вызова gettext.

После включения приложение должно предоставить функции для gettext, ngettext, и необязательно pgettext и npgettext, либо глобально, либо при отрисовке. Функция _() добавлена как псевдоним функции gettext.

Методы среды

После включения расширения среда предоставляет следующие дополнительные методы:

jinja2.Environment.install_gettext_translations(translations, newstyle=False)

Устанавливает перевод глобально для среды. Объект translations должен реализовывать gettext, ngettext, и необязательно pgettext и npgettext. Поддерживаются gettext.NullTranslations, gettext.GNUTranslations и Translations от Babel.

Изменено в версии 3.0: Добавлено pgettext и npgettext.

Изменения

Изменено в версии 2.5: Добавлена поддержка gettext нового стиля.

jinja2.Environment.install_null_translations(newstyle=False)

Устанавливает функции gettext, которые ничего не делают. Это полезно, если вы хотите подготовить приложение к международному использованию, но пока не хотите реализовывать полную систему.

Изменения

Изменено в версии 2.5: Добавлена поддержка gettext нового стиля.

jinja2.Environment.install_gettext_callables(gettext, ngettext, newstyle=False, pgettext=None, npgettext=None)

Устанавливает заданные gettext, ngettext, pgettext, и npgettext вызываемые объекты в среду. Они должны вести себя точно так же, как gettext.gettext(), gettext.ngettext(), gettext.pgettext() и gettext.npgettext().

Если newstyle включено, вызываемые объекты оборачиваются для работы как вызываемые объекты нового стиля. Подробнее см. Новый стиль Gettext.

Изменено в версии 3.0: Добавлено pgettext и npgettext.

Изменения

Добавлен в версии 2.5: Добавлена поддержка gettext нового стиля.

jinja2.Environment.uninstall_gettext_translations()

Удалить глобально установленный перевод среды.

jinja2.Environment.extract_translations(source)

Извлечь переводимые строки из заданного узла шаблона или исходного кода.

Для каждой найденной строки эта функция возвращает кортеж (lineno, function, message), где:

  • lineno — номер строки, в которой была найдена строка.
  • function — имя используемой функции gettext (если строка была извлечена из вложенного Python-кода).
  • message — сама строка или кортеж строк для функций с несколькими аргументами.

Если установлен Babel, см. Babel для извлечения строк.

Для веб-приложения, доступного на нескольких языках, но предоставляющего всем пользователям один и тот же язык (например, форумное программное обеспечение на нескольких языках, установленное для французского сообщества), перевод можно установить при создании среды.

translations = get_gettext_translations()
env = Environment(extensions=["jinja2.ext.i18n"])
env.install_gettext_translations(translations)

Функция get_gettext_translations вернёт переводчика для текущей конфигурации, например, используя gettext.find.

Использование расширения i18n для разработчиков шаблонов описано в документации шаблонов.

Удаление пробелов

Изменения

Добавлен в версии 2.10.

Внутри блоков {% trans %} бывает полезно обрезать символы перевода строки и пробелы, чтобы блок текста выглядел как простая строка с одиночными пробелами в файле перевода.

Символы перевода строки и окружающие пробелы могут быть автоматически удалены путём включения политики ext.i18n.trimmed политики.

Новый стиль Gettext

Изменения

Добавлен в версии 2.5.

Вызовы gettext нового стиля короче, менее подвержены ошибкам и лучше поддерживают автоматическое экранирование.

Вы можете использовать вызовы gettext «нового стиля», установив env.newstyle_gettext = True или передав newstyle=True в env.install_translations. Они полностью поддерживаются инструментом извлечения Babel, но могут не работать должным образом с другими инструментами извлечения.

В стандартных вызовах gettext, форматирование строки — это отдельный шаг, выполняемый с помощью фильтра |format. Это требует дублирования работы для ngettext вызовов.

{{ gettext("Hello, World!") }}
{{ gettext("Hello, %(name)s!")|format(name=name) }}
{{ ngettext(
       "%(num)d apple", "%(num)d apples", apples|count
   )|format(num=apples|count) }}
{{ pgettext("greeting", "Hello, World!") }}
{{ npgettext(
       "fruit", "%(num)d apple", "%(num)d apples", apples|count
   )|format(num=apples|count) }}

Вызовы gettext нового стиля делают форматирование частью вызова и обеспечивают большую согласованность.

{{ gettext("Hello, World!") }}
{{ gettext("Hello, %(name)s!", name=name) }}
{{ ngettext("%(num)d apple", "%(num)d apples", apples|count) }}
{{ pgettext("greeting", "Hello, World!") }}
{{ npgettext("fruit", "%(num)d apple", "%(num)d apples", apples|count) }}

Преимущества вызовов gettext нового стиля:

  • Нет отдельного шага форматирования, не нужно помнить о использовании фильтра |format.
  • Допускаются только именованные заполнитель. Это решает общую проблему, с которой сталкиваются переводчики, потому что позиционные плейсхолдеры не могут осмысленно переключаться. Именованные плейсхолдеры всегда содержат семантическую информацию о том, какое значение где расположено.
  • Форматирование строк используется даже если не используются плейсхолдеры, что делает все строки согласованными в формате. Не забудьте экранировать все необработанные проценты как %%, например 100%%.
  • Переведённая строка помечена как безопасная, форматирование выполняет экранирование по мере необходимости. Пометьте параметр как |safe если он уже экранирован.

Оператор выражения

Имя импорта: jinja2.ext.do

Расширение «do», то есть оператор выражения, добавляет в движок шаблонов простой тег do, который работает как выражение переменной, но игнорирует возвращаемое значение.

Управление циклами

Имя импорта: jinja2.ext.loopcontrols

Это расширение добавляет поддержку break и continue в циклах. После включения Jinja предоставляет эти два ключевых слова, которые работают точно так же, как и в Python.

Оператор with

Имя импорта: jinja2.ext.with_

Изменения

Изменено в версии 2.9: Это расширение теперь встроенное и больше ничего не делает.

Расширение автоматического экранирования

Имя импорта: jinja2.ext.autoescape

Изменения

Изменено в версии 2.9: Это расширение было удалено и теперь встроенное. Включение расширения больше ничего не делает.

Расширение отладки

Имя импорта: jinja2.ext.debug

Добавляет тег {% debug %} для вывода текущего контекста, а также доступных фильтров и тестов. Это полезно для просмотра доступных ресурсов в шаблоне без настройки отладчика.

END_OF_DOCUMENT_MARKER

Написание расширений

Написав расширения, вы можете добавить пользовательские теги в Jinja. Это непростая задача, и обычно она не требуется, так как стандартные теги и выражения покрывают все распространенные случаи использования. Расширение i18n — хороший пример того, почему расширения полезны. Ещё одним примером было бы кэширование фрагментов.

При написании расширений следует помнить, что вы работаете с компилятором шаблонов Jinja, который не проверяет дерево узлов, которое вы ему передаёте. Если AST неверно сформирован, у вас возникнут всевозможные ошибки компилятора или времени выполнения, которые сложно отлаживать. Всегда убедитесь, что вы правильно используете созданные узлы. В документации по API ниже показаны существующие узлы и как их использовать.

Примеры расширений

Кэширование

Следующий пример реализует тег cache для Jinja с использованием библиотеки cachelib:

from jinja2 import nodes
from jinja2.ext import Extension


class FragmentCacheExtension(Extension):
    # a set of names that trigger the extension.
    tags = {"cache"}

    def __init__(self, environment):
        super().__init__(environment)

        # add the defaults to the environment
        environment.extend(fragment_cache_prefix="", fragment_cache=None)

    def parse(self, parser):
        # the first token is the token that started the tag.  In our case
        # we only listen to ``'cache'`` so this will be a name token with
        # `cache` as value.  We get the line number so that we can give
        # that line number to the nodes we create by hand.
        lineno = next(parser.stream).lineno

        # now we parse a single expression that is used as cache key.
        args = [parser.parse_expression()]

        # if there is a comma, the user provided a timeout.  If not use
        # None as second parameter.
        if parser.stream.skip_if("comma"):
            args.append(parser.parse_expression())
        else:
            args.append(nodes.Const(None))

        # now we parse the body of the cache block up to `endcache` and
        # drop the needle (which would always be `endcache` in that case)
        body = parser.parse_statements(["name:endcache"], drop_needle=True)

        # now return a `CallBlock` node that calls our _cache_support
        # helper method on this extension.
        return nodes.CallBlock(
            self.call_method("_cache_support", args), [], [], body
        ).set_lineno(lineno)

    def _cache_support(self, name, timeout, caller):
        """Helper callback."""
        key = self.environment.fragment_cache_prefix + name

        # try to load the block from the cache
        # if there is no fragment in the cache, render it and store
        # it in the cache.
        rv = self.environment.fragment_cache.get(key)
        if rv is not None:
            return rv
        rv = caller()
        self.environment.fragment_cache.add(key, rv, timeout)
        return rv

Вот как его использовать в среде:

from jinja2 import Environment
from cachelib import SimpleCache

env = Environment(extensions=[FragmentCacheExtension])
env.fragment_cache = SimpleCache()

В шаблоне можно пометить блоки как кэшируемые. В следующем примере кешируется сайдбар на 300 секунд:

{% cache 'sidebar', 300 %}
<div class="sidebar">
    ...
</div>
{% endcache %}

Встроенная gettext

Следующий пример демонстрирует использование Extension.filter_stream() для разбора вызовов функции _() gettext в строке со статическими данными без необходимости использования блоков Jinja.

<h1>_(Welcome)</h1>
<p>_(This is a paragraph)</p>

Для этого необходимо загрузить и настроить расширение i18n.

import re

from jinja2.exceptions import TemplateSyntaxError
from jinja2.ext import Extension
from jinja2.lexer import count_newlines
from jinja2.lexer import Token


_outside_re = re.compile(r"\\?(gettext|_)\(")
_inside_re = re.compile(r"\\?[()]")


class InlineGettext(Extension):
    """This extension implements support for inline gettext blocks::

        <h1>_(Welcome)</h1>
        <p>_(This is a paragraph)</p>

    Requires the i18n extension to be loaded and configured.
    """

    def filter_stream(self, stream):
        paren_stack = 0

        for token in stream:
            if token.type != "data":
                yield token
                continue

            pos = 0
            lineno = token.lineno

            while True:
                if not paren_stack:
                    match = _outside_re.search(token.value, pos)
                else:
                    match = _inside_re.search(token.value, pos)
                if match is None:
                    break
                new_pos = match.start()
                if new_pos > pos:
                    preval = token.value[pos:new_pos]
                    yield Token(lineno, "data", preval)
                    lineno += count_newlines(preval)
                gtok = match.group()
                if gtok[0] == "\\":
                    yield Token(lineno, "data", gtok[1:])
                elif not paren_stack:
                    yield Token(lineno, "block_begin", None)
                    yield Token(lineno, "name", "trans")
                    yield Token(lineno, "block_end", None)
                    paren_stack = 1
                else:
                    if gtok == "(" or paren_stack > 1:
                        yield Token(lineno, "data", gtok)
                    paren_stack += -1 if gtok == ")" else 1
                    if not paren_stack:
                        yield Token(lineno, "block_begin", None)
                        yield Token(lineno, "name", "endtrans")
                        yield Token(lineno, "block_end", None)
                pos = match.end()

            if pos < len(token.value):
                yield Token(lineno, "data", token.value[pos:])

        if paren_stack:
            raise TemplateSyntaxError(
                "unclosed gettext expression",
                token.lineno,
                stream.name,
                stream.filename,
            )

API расширений

Расширение

Расширения всегда должны расширять класс jinja2.ext.Extension:

class jinja2.ext.Extension(environment)

Расширения могут быть использованы для добавления дополнительной функциональности в систему шаблонов Jinja на уровне парсера. Пользовательские расширения привязаны к среде, но не могут хранить данные, специфичные для среды, в self. Причина в том, что расширение можно привязать к другой среде (для наложений) путём создания копии и повторной привязки атрибута environment.

Поскольку расширения создаются средой, они не могут принимать какие-либо аргументы для конфигурации. Можно обойти это с помощью функции-фабрики, но это невозможно, так как расширения идентифицируются по имени импорта. Правильный способ конфигурации расширения — хранение значений конфигурации в среде. Так как среда в итоге действует как центральное хранилище конфигурации, атрибуты могут конфликтовать, поэтому расширения должны гарантировать, что выбираемые ими имена конфигурации не слишком общие. prefix — ужасное имя, а fragment_cache_prefix — хорошее, так как включает имя расширения (кеш фрагментов).

Параметры

environment (jinja2.environment.Environment) –

Тип возвращаемого значения

None

identifier

Идентификатор расширения. Это всегда истинное имя импорта класса расширения и его нельзя изменять.

tags

Если расширение реализует пользовательские теги, это набор имён тегов, за которыми расширение следит.

attr(name, lineno=None)

Возвращает узел атрибута для текущего расширения. Это полезно для передачи констант расширений сгенерированному коду шаблона.

self.attr('_my_attribute', lineno=lineno)
Параметры
  • name (str) –
  • lineno (Необязательно[int]) –
Тип возвращаемого значения

jinja2.nodes.ExtensionAttribute

call_method(name, args=None, kwargs=None, dyn_args=None, dyn_kwargs=None, lineno=None)

Вызов метода расширения. Это сокращение для attr() + jinja2.nodes.Call.

Параметры
  • name (str) –
  • args (Необязательно[List[jinja2.nodes.Expr]]) –
  • kwargs (Необязательно[List[jinja2.nodes.Keyword]]) –
  • dyn_args (Необязательно[jinja2.nodes.Expr]) –
  • dyn_kwargs (Необязательно[jinja2.nodes.Expr]) –
  • lineno (Необязательно[int]) –
Тип возвращаемого значения

jinja2.nodes.Call

filter_stream(stream)

Ему передаётся TokenStream, который можно использовать для фильтрации возвращаемых токенов. Этот метод должен возвращать итерируемый набор Tokens, но он не обязан возвращать TokenStream.

Параметры

stream (TokenStream) –

Тип возвращаемого значения

Union[TokenStream, Iterable[Token]]

parse(parser)

Если какой-либо из tags совпал, этот метод вызывается с парсером в качестве первого аргумента. Токен, на котором находится поток парсера, — это токен имени, который совпал. Этот метод должен вернуть один или список нескольких узлов.

Параметры

parser (Parser) –

Тип возвращаемого значения

Union[jinja2.nodes.Node, List[jinja2.nodes.Node]]

preprocess(source, name, filename=None)

Этот метод вызывается перед фактической лексической обработкой и может быть использован для предварительной обработки исходного кода. filename — необязательно. Значение возврата должно быть предварительно обработанным исходным кодом.

Параметры
  • source (str) –
  • name (Необязательно[str]) –
  • filename (Необязательно[str]) –
Тип возвращаемого значения

str

Парсер

Парсер, переданный в Extension.parse(), предоставляет способы разбора выражений разных типов. Расширения могут использовать следующие методы:

class jinja2.parser.Parser(environment, source, name=None, filename=None, state=None)

Это центральный класс разбора, который Jinja использует. Он передаётся расширениям и может использоваться для разбора выражений или операторов.

Параметры
  • environment (Environment) –
  • source (str) –
  • name (Необязательно[str]) –
  • filename (Необязательно[str]) –
  • state (Необязательно[str]) –
Тип возвращаемого значения

None

filename

Имя файла шаблона, который обрабатывает парсер. Это не имя загруженного шаблона. Для имени загруженного шаблона см. name. Для шаблонов, загруженных не из файловой системы, это None.

name

Имя загруженного шаблона.

stream

Текущий TokenStream

fail(msg, lineno=None, exc=<class 'jinja2.exceptions.TemplateSyntaxError'>)

Удобный метод, который вызывает exc с сообщением, номером строки или последним номером строки, а также текущим именем и именем файла.

Параметры
  • msg (str) –
  • lineno (Необязательно[int]) –
  • exc (Тип[jinja2.exceptions.TemplateSyntaxError]) –
Тип возвращаемого значения

NoReturn

free_identifier(lineno=None)

Возвращает новый свободный идентификатор как InternalName.

Параметры

lineno (Необязательно[int]) –

Тип возвращаемого значения

jinja2.nodes.InternalName

parse_assign_target(with_tuple=True, name_only=False, extra_end_rules=None, with_namespace=False)

Разбирает целевое значение присваивания. Поскольку Jinja позволяет присваивать значения кортежам, эта функция может разбирать все разрешённые целевые значения присваивания. По умолчанию разбираются присваивания кортежам, однако это можно отключить, установив with_tuple в False. Если требуются только присваивания именам, name_only можно установить в True. Параметр extra_end_rules передаётся функции разбора кортежей. Если with_namespace включено, может быть разбор присваивания имени пространства имён.

Параметры
  • with_tuple (bool) –
  • name_only (bool) –
  • extra_end_rules (Необязательно[Tuple[str, ...]]) –
  • with_namespace (bool) –
Тип возвращаемого значения

Union[jinja2.nodes.NSRef, jinja2.nodes.Name, jinja2.nodes.Tuple]

parse_expression(with_condexpr=True)

Разбирает выражение. По умолчанию все выражения разбираются, если опциональный параметр with_condexpr установлен в False, условные выражения не разбираются.

Параметры

with_condexpr (bool) –

Тип возвращаемого значения

jinja2.nodes.Expr

parse_statements(end_tokens, drop_needle=False)

Разбирает несколько операторов в список до тех пор, пока не будет достигнут один из маркеров конца. Это используется для разбора тела операторов, так как он также разбирает данные шаблона, если это уместно. Сначала парсер проверяет, является ли текущий токен двоеточием, и пропускает его, если он есть. Затем он проверяет конец блока и разбирает его, пока не достигнет одного из end_tokens. По умолчанию активный токен в потоке в конце вызова является совпавшим маркером конца. Если этого не требуется, drop_needle можно установить в True, и токен конца будет удалён.

Параметры
  • end_tokens (Tuple[str, ...]) –
  • drop_needle (bool) –
Тип возвращаемого значения

List[jinja2.nodes.Node]

parse_tuple(simplified=False, with_condexpr=True, extra_end_rules=None, explicit_parentheses=False)

Работает как parse_expression , но если несколько выражений разделяются запятой, создаётся узел Tuple. Этот метод также может вернуть обычное выражение вместо кортежа, если запятых не было найдено.

Режим разбора по умолчанию — полный кортеж. Если simplified равно True, разбираются только имена и литералы. Параметр no_condexpr передаётся в parse_expression().

Так как кортежи не требуют разделителей и могут заканчиваться ложной запятой, требуется дополнительный подсказка, которая отмечает конец кортежа. Например, циклы for поддерживают кортежи между for и in. В этом случае extra_end_rules устанавливается в ['name:in'].

explicit_parentheses истинно, если разбор был инициирован выражением в скобках. Это используется, чтобы выяснить, является ли пустой кортеж допустимым выражением или нет.

Параметры
  • simplified (bool) –
  • with_condexpr (bool) –
  • extra_end_rules (Необязательно[Tuple[str, ...]]) –
  • explicit_parentheses (bool) –
Тип возвращаемого значения

Union[jinja2.nodes.Tuple, jinja2.nodes.Expr]

class jinja2.lexer.TokenStream(generator, name, filename)

Поток токенов — это итерируемый объект, возвращающий Token объекты. Однако парсер не итерируется по нему, а вызывает next() для перехода к следующему токену. Текущий активный токен хранится как current.

Параметры
  • generator (Iterable[jinja2.lexer.Token]) –
  • name (Optional[str]) –
  • filename (Optional[str]) –
current

Текущий Token.

__next__()

Перейти к следующему токену и вернуть предыдущий.

Используйте встроенную функцию next(), вместо прямого вызова.

Тип возвращаемого значения

jinja2.lexer.Token

property eos: bool

Находимся ли мы в конце потока?

expect(expr)

Ожидается указанный тип токена и возвращается он. Принимает те же аргументы, что и jinja2.lexer.Token.test().

Параметры

expr (str) –

Тип возвращаемого значения

jinja2.lexer.Token

look()

Посмотреть на следующий токен.

Тип возвращаемого значения

jinja2.lexer.Token

next_if(expr)

Выполнить проверку токена и вернуть токен, если он совпал. В противном случае возвращается None.

Параметры

expr (str) –

Тип возвращаемого значения

Optional[jinja2.lexer.Token]

push(token)

Возвратить токен в поток.

Параметры

token (jinja2.lexer.Token) –

Тип возвращаемого значения

None

skip(n=1)

Перейти на n токенов вперёд.

Параметры

n (int) –

Тип возвращаемого значения

None

skip_if(expr)

Аналогично next_if(), но возвращает только True или False.

Параметры

expr (str) –

Тип возвращаемого значения

bool

class jinja2.lexer.Token(lineno, type, value)
Параметры
  • lineno (int) –
  • type (str) –
  • value (str) –
lineno

Номер строки токена

type

Тип токена. Эта строка интернирована, поэтому вы можете сравнивать её со строками с помощью оператора is.

value

Значение токена.

test(expr)

Проверка токена по выражению токена. Это может быть тип токена или 'token_type:token_value' . Проверка возможна только со строковыми значениями и типами.

Параметры

expr (str) –

Тип возвращаемого значения

bool

test_any(*iterable)

Проверка по нескольким выражениям токенов.

Параметры

iterable (str) –

Тип возвращаемого значения

bool

В модуле лексера также есть вспомогательная функция для подсчёта символов новой строки в строках:

jinja2.lexer.count_newlines(value)

Подсчёт количества символов новой строки в строке. Полезно для расширений, которые фильтруют поток.

Параметры

value (str) –

Тип возвращаемого значения

int

AST

AST (Абстрактное синтаксическое дерево) используется для представления шаблона после парсинга. Он состоит из узлов, которые компилятор затем преобразует в исполняемые объекты кода Python. Расширения, предоставляющие пользовательские операторы, могут возвращать узлы для выполнения пользовательского Python-кода.

Ниже приведен список всех доступных в настоящее время узлов. AST может изменяться между версиями Jinja, но будет оставаться обратной совместимой.

Для получения дополнительной информации обратитесь к представлению jinja2.Environment.parse().

class jinja2.nodes.Node

Базовый класс для всех узлов Jinja. Существует ряд доступных узлов различных типов. Есть четыре основных типа:

  • Stmt: операторы
  • Expr: выражения
  • Helper: узлы помощников
  • Template: внешний оберточный узел

Все узлы имеют поля и атрибуты. Поля могут быть другими узлами, списками или произвольными значениями. Поля передаются в конструктор как обычные позиционные аргументы, атрибуты — как именованные аргументы. Каждый узел имеет два атрибута: lineno (номер строки узла) и environment. Атрибут environment устанавливается в конце процесса парсинга для всех узлов автоматически.

Parameters
  • fields (Any) –
  • attributes (Any) –
Return type

None

find(node_type)

Находит первый узел заданного типа. Если такой узел не существует, возвращается значение None.

Parameters

node_type (Type[jinja2.nodes._NodeBound]) –

Return type

Optional[jinja2.nodes._NodeBound]

find_all(node_type)

Находит все узлы заданного типа. Если тип является кортежем, проверка выполняется для любого из элементов кортежа.

Parameters

node_type (Union[Type[jinja2.nodes._NodeBound], Tuple[Type[jinja2.nodes._NodeBound], ...]]) –

Return type

Iterator[jinja2.nodes._NodeBound]

iter_child_nodes(exclude=None, only=None)

Итерируется по всем дочерним узлам узла. Это перебирает все поля и возвращает значения, если они являются узлами. Если значение поля является списком, возвращаются все узлы в этом списке.

Parameters
  • exclude (Optional[Container[str]]) –
  • only (Optional[Container[str]]) –
Return type

Iterator[jinja2.nodes.Node]

iter_fields(exclude=None, only=None)

Этот метод итерируется по всем определённым полям и возвращает кортежи (key, value). По умолчанию возвращаются все поля, но это можно ограничить некоторыми полями, предоставив параметр only, или исключить некоторые, используя параметр exclude. Оба должны быть множествами или кортежами имён полей.

Parameters
  • exclude (Optional[Container[str]]) –
  • only (Optional[Container[str]]) –
Return type

Iterator[Tuple[str, Any]]

set_ctx(ctx)

Сбрасывает контекст узла и всех дочерних узлов. По умолчанию парсер создает все узлы, у которых контекст «загрузка», поскольку это наиболее распространённый вариант. Этот метод используется в парсере для установки целевых значений присваивания и других узлов в контекст «хранение».

Parameters

ctx (str) –

Return type

jinja2.nodes.Node

set_environment(environment)

Устанавливает среду для всех узлов.

Parameters

environment (Environment) –

Return type

Node

set_lineno(lineno, override=False)

Устанавливает номера строк узла и дочерних элементов.

Parameters
  • lineno (int) –
  • override (bool) –
Return type

jinja2.nodes.Node

class jinja2.nodes.Expr

Базовый класс для всех выражений.

Node type

Node

Parameters
  • fields (Any) –
  • attributes (Any) –
Return type

None

as_const(eval_ctx=None)

Возвращает значение выражения как константу или вызывает Impossible, если это невозможно.

Можно предоставить EvalContext, в противном случае создаётся контекст по умолчанию, требующий наличия связанной среды у узлов.

Changelog

Изменено в версии 2.4: был добавлен параметр eval_ctx.

Parameters

eval_ctx (Optional[jinja2.nodes.EvalContext]) –

Return type

Any

can_assign()

Проверяет, можно ли присвоить значение этому узлу.

Return type

bool

class jinja2.nodes._FilterTestCommon(node, name, args, kwargs, dyn_args, dyn_kwargs)
Node type

Expr

Parameters
  • fields (Any) –
  • attributes (Any) –
Return type

None

END_OF_DOCUMENT_MARKER
class jinja2.nodes.Filter(node, name, args, kwargs, dyn_args, dyn_kwargs)

Применяет фильтр к выражению. name — это имя фильтра, другие поля совпадают с Call.

Если node равно None, фильтр используется в блоке фильтрации и применяется к содержимому блока.

Тип узла

_FilterTestCommon

Параметры
  • fields (Любой тип) –
  • attributes (Любой тип) –
Тип возвращаемого значения

None

class jinja2.nodes.Test(node, name, args, kwargs, dyn_args, dyn_kwargs)

Применяет тест к выражению. name — это имя теста, другие поля совпадают с Call.

Изменено в версии 3.0: as_const использует ту же логику для фильтров и тестов. Тесты проверяют наличие декораторов volatile, async и @pass_context и т. д.

Тип узла

_FilterTestCommon

Параметры
  • fields (Любой тип) –
  • attributes (Любой тип) –
Тип возвращаемого значения

None

class jinja2.nodes.BinExpr(left, right)

Базовый класс для всех бинарных выражений.

Тип узла

Expr

Параметры
  • fields (Любой тип) –
  • attributes (Любой тип) –
Тип возвращаемого значения

None

class jinja2.nodes.Add(left, right)

Добавляет значение левого узла к правому.

Тип узла

BinExpr

Параметры
  • fields (Любой тип) –
  • attributes (Любой тип) –
Тип возвращаемого значения

None

class jinja2.nodes.And(left, right)

Логическое И (короткое замыкание).

Тип узла

BinExpr

Параметры
  • fields (Любой тип) –
  • attributes (Любой тип) –
Тип возвращаемого значения

None

class jinja2.nodes.Compare(expr, ops)

Сравнивает выражение с другими выражениями. ops должно быть списком Operand.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Concat(nodes)

Конкатенирует список выражений после их преобразования в строки.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.CondExpr(test, expr1, expr2)

Условное выражение (встроенное выражение if). ({{ foo if bar else baz }})

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.ContextReference

Возвращает текущий контекст шаблона. Он может использоваться как узел Name с параметром 'load' ctx и вернёт текущий объект Context.

Вот пример, который присваивает текущее имя шаблона переменной с именем foo:

Assign(Name('foo', ctx='store'),
       Getattr(ContextReference(), 'name'))

Это в основном эквивалентно использованию декоратора pass_context() при использовании API высокого уровня, что приводит к передаче ссылки на контекст в качестве первого аргумента функции.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.DerivedContextReference

Возвращает текущий контекст шаблона, включая локальные переменные. Ведёт себя точно как ContextReference, но включает локальные переменные, например, из цикла for.

Changelog

Добавлен в версии 2.11.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.EnvironmentAttribute(name)

Загружает атрибут из объекта среды. Это полезно для расширений, которые хотят вызвать обратный вызов, хранящийся в среде.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.ExtensionAttribute(identifier, name)

Возвращает атрибут расширения, привязанного к среде. Идентификатор — идентификатор Extension.

Этот узел обычно создаётся вызовом метода attr() расширения.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Getattr(node, attr, ctx)

Получает атрибут или элемент из выражения, являющегося строкой байтов, содержащей только символы ASCII, и отдаёт предпочтение атрибуту.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Getitem(node, arg, ctx)

Получает атрибут или элемент из выражения и отдаёт предпочтение элементу.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.ImportedName(importname)

Если создан с именем импорта, имя импорта возвращается при обращении к узлу. Например, ImportedName('cgi.escape') возвращает функцию escape из модуля cgi при вычислении. Импорты оптимизированы компилятором, поэтому нет необходимости присваивать их локальным переменным.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.InternalName(name)

Внутреннее имя в компиляторе. Вы не можете создавать такие узлы самостоятельно, но анализатор предоставляет метод free_identifier(), который создаёт для вас новое имя идентификатора. Этот идентификатор недоступен из шаблона и не обрабатывается компилятором особым образом.

Тип узла

Expr

Тип возвращаемого значения

None

END_OF_DOCUMENT_MARKER
class jinja2.nodes.Literal

Базовый класс для литералов.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Const(value)

Все константные значения. Парсер вернёт этот узел для простых констант, таких как 42 или "foo", но он также может использоваться для хранения более сложных значений, таких как списки. Только константы с безопасным представлением (объекты, для которых eval(repr(x)) == x истинно).

Тип узла

Literal

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Dict(items)

Любой литерал словаря, такой как {1: 2, 3: 4}. Элементы должны быть списком узлов Pair.

Тип узла

Literal

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.List(items)

Любой список-литерал, например [1, 2, 3]

Тип узла

Literal

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.TemplateData(data)

Константная строка шаблона.

Тип узла

Literal

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Tuple(items, ctx)

Для распаковки циклов for и некоторых других вещей, таких как несколько аргументов для индексов. Например, для Name ctx указывает, используется ли кортеж для загрузки имён или хранения.

Тип узла

Literal

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.MarkSafe(expr)

Отметить обернутое выражение как безопасное (оборачивая его как Markup).

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.MarkSafeIfAutoescape(expr)

Отметить обернутое выражение как безопасное (оборачивая его как Markup), но только если включён автоэскэпинг.

Changelog

New in version 2.5.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Name(name, ctx)

Ищет имя или сохраняет значение в имя. ctx узла может принимать следующие значения:

  • store: сохраняет значение в имени
  • load: загружает это имя
  • param: как store , но если имя было определено как параметр функции.
Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.NSRef(name, attr)

Ссылка на присваивание значения в пространстве имён

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Slice(start, stop, step)

Представляет объект среза. Это должно использоваться только в качестве аргумента для Subscript.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.UnaryExpr(node)

Базовый класс для всех унарных выражений.

Тип узла

Expr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Neg(node)

Сделать выражение отрицательным.

Тип узла

UnaryExpr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

END_OF_DOCUMENT_MARKER
class jinja2.nodes.Not(node)

Отрицание выражения.

Тип узла

UnaryExpr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Pos(node)

Делает выражение положительным (ничего не делает для большинства выражений).

Тип узла

UnaryExpr

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Helper

Узлы, которые существуют только в определенном контексте.

Тип узла

Node

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Keyword(key, value)

Пара ключ-значение для именованных аргументов, где ключ — строка.

Тип узла

Helper

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Operand(op, expr)

Содержит оператор и выражение.

Тип узла

Helper

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Pair(key, value)

Пара ключ-значение для словарей.

Тип узла

Helper

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Stmt

Базовый узел для всех операторов.

Тип узла

Node

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Assign(target, node)

Присваивает выражение целевому значению.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.AssignBlock(target, filter, body)

Присваивает блок целевому значению.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Block(name, body, scoped, required)

Узел, представляющий блок.

Изменено в версии 3.0.0: поле required было добавлено.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Break

Прервать цикл.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.CallBlock(call, args, defaults, body)

Как макрос без имени, но с вызовом вместо него. call вызывается с безымянным макросом в качестве caller аргумента, который содержит данный узел.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Continue

Продолжить цикл.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.EvalContextModifier(options)

Изменяет контекст вычисления. Для каждой опции, которую нужно изменить, необходимо добавить Keyword в список options.

Пример изменения параметра autoescape:

EvalContextModifier(options=[Keyword('autoescape', Const(True))])
Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.ScopedEvalContextModifier(options, body)

Изменяет контекст вычисления и отменяет изменения позднее. Работает точно так же, как EvalContextModifier, но будет изменять только EvalContext для узлов в body.

Тип узла

EvalContextModifier

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.ExprStmt(node)

Оператор, который вычисляет выражение и отбрасывает результат.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Extends(template)

Представляет оператор extends.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.FilterBlock(body, filter)

Узел для разделов фильтров.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.For(target, iter, body, else_, test, recursive)

Цикл for. target — целевой элемент итерации (обычно Name или Tuple), iter — итерируемый объект. body — список узлов, используемых в теле цикла, а else_ — список узлов для блока else. Если узел else отсутствует, список должен быть пустым.

Для фильтруемых узлов выражение может храниться как test, в противном случае None.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.FromImport(template, names, with_context)

Узел, представляющий тег from import. Важно не передавать небезопасные имена в атрибут name. Компилятор переводит обращения к атрибутам непосредственно в вызовы getattr и не использует обратный вызов подстроки интерфейса. Так как экспортируемые переменные, вероятно, не начинаются с двойных подчеркиваний (что проверяется парсером), это не проблема для обычного кода Jinja, но если этот узел используется в расширении, необходимо проявлять особую осторожность.

Список имен может содержать кортежи, если требуются псевдонимы.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.If(test, body, elif_, else_)

Если test истинно, то body рендерится, иначе else_.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Import(template, target, with_context)

Узел, представляющий тег import.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Include(template, with_context, ignore_missing)

Узел, представляющий тег include.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Macro(name, args, defaults, body)

Определение макроса. name — имя макроса, args — список аргументов, а defaults — список значений по умолчанию, если таковые имеются. body — список узлов для тела макроса.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.Output(nodes)

Узел, содержащий несколько выражений, которые затем выводятся. Используется как для оператора print , так и для обычных данных шаблона.

Тип узла

Stmt

Параметры
  • fields (Any) –
  • attributes (Any) –
Тип возвращаемого значения

None

class jinja2.nodes.OverlayScope(context, body)

Область видимости наложения для расширений. Это область видимости, в значительной степени не оптимизированная, но которая может быть использована для введения произвольных переменных в подобласть из словаря или объекта, подобного словарю. Поле context должно иметь значение объекта словаря.

Пример использования:

OverlayScope(context=self.call_method('get_context'),
             body=[...])
Журнал изменений

Новая в версии 2.10.

Тип узла

Stmt

Параметры
  • fields (Любой) –
  • attributes (Любой) –
Тип возвращаемого значения

None

class jinja2.nodes.Scope(body)

Искусственная область видимости.

Тип узла

Stmt

Параметры
  • fields (Любой) –
  • attributes (Любой) –
Тип возвращаемого значения

None

class jinja2.nodes.With(targets, values, body)

Узел для операторов with. В более ранних версиях Jinja оператор with был реализован на основе узла Scope.

Журнал изменений

Новая в версии 2.9.3.

Тип узла

Stmt

Параметры
  • fields (Любой) –
  • attributes (Любой) –
Тип возвращаемого значения

None

class jinja2.nodes.Template(body)

Узел, представляющий шаблон. Это должен быть самый внешний узел, который передаётся компилятору.

Тип узла

Node

Параметры
  • fields (Любой) –
  • attributes (Любой) –
Тип возвращаемого значения

None

exception jinja2.nodes.Impossible

Вызывается, если узел не смог выполнить запрашиваемое действие.

© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://jinja.palletsprojects.com/en/3.0.x/extensions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API