Сообщить об ошибке.

Декораторы для добавления фильтров или функции в среду Jinja

Приведенные в материале вспомогательные функции и классы модуля jinja2 полезны, если добавляются свои собственные фильтры или функции в среду модуля jinja2.

Содержание:


jinja2.pass_context(f):

Декоратор jinja2.pass_context() передает контекст Context в качестве первого аргумента декорированной функции при вызове во время рендеринга шаблона.

Может использоваться в функциях, фильтрах и тестах.

Если нужен только Context.eval_ctx, используйте jinja2.pass_eval_context(). Если требуется только Context.environment, используйте jinja2.pass_environment().

Новое в версии 3.0: заменяет контекстную функцию jinja2.contextfunction и контекстный фильтр jinja2.contextfilter.

jinja2.pass_environment(f):

Декоратор jinja2.pass_environment() передает Environment в качестве первого аргумента декорированной функции при вызове во время рендеринга шаблона.

Может использоваться в функциях, фильтрах и тестах.

Новое в версии 3.0: заменяет функцию jinja2.environmentfunction() и фильтр jinja2.environmentfilter().

jinja2.environmentfilter(f):

Декоратор jinja2.environmentfilter() передает среду Environment в качестве первого аргумента декорированной функции.

Устарело с версии 3.0: будет удалено в Jinja 3.1. Вместо этого используйте jinja2.pass_environment().

jinja2.environmentfunction(f):

Декоратор jinja2.environmentfunction() передает среду Environment в качестве первого аргумента декорированной функции.

Устарело с версии 3.0: будет удалено в Jinja 3.1. Вместо этого используйте jinja2.pass_environment().

jinja2.contextfilter(f):

Декоратор jinja2.contextfilter() передает контекст Context в качестве первого аргумента декорированной функции.

Устарело с версии 3.0: будет удалено в Jinja 3.1. Вместо этого используйте jinja2.pass_context().

jinja2.contextfunction(f):

Декоратор jinja2.contextfunction() передает контекст Context в качестве первого аргумента декорированной функции.

Такое поведение полезно, если функция хочет получить доступ к контексту или функциям, предоставленным в объекте контекста. Пример функции, которая возвращает отсортированный список переменных шаблона, экспортируемых текущим шаблоном:

@contextfunction
def get_exported_names(context):
    return sorted(context.exported_vars)

Устарело с версии 3.0: будет удалено в Jinja 3.1. Вместо этого используйте jinja2.pass_context().

jinja2.escape(s):

Функция jinja2.escape() преобразует символы &, <, >, ' и " в строках s в безопасные для HTML последовательности. Используйте эту функцию, если необходимо отобразить текст, который может содержать такие символы в HTML.

Эта функция не будет экранировать объекты, которые имеют представление HTML, например, уже экранированные данные.

Возвращаемое значение представляет собой объект Markup.

>>> import jinja2
>>> m = jinja2.escape('&, <, >')
>>> m
# Markup('&amp;, &lt;, &gt;')
>>> str(m)
# '&amp;, &lt;, &gt;'

jinja2.clear_caches():

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

jinja2.is_undefined(obj):

Функция jinja2.is_undefined() проверяет, не определен ли переданный объект. Это не что иное, как проверка экземпляра на Undefined, но выглядит лучше.

Функцию можно использовать для настраиваемых фильтров или тестов, которые должны реагировать на неопределенные Undefined переменные.

Например, настраиваемый фильтр по умолчанию может выглядеть так:

def default(var, default=''):
    if is_undefined(var):
        return default
    return var