import jinja2 jinja2.runtime.Context()
Context
.Контекст шаблона jinja2.runtime.Context()
содержит все переменные шаблона. В нем хранятся значения, переданные в шаблон, а также имена, которые экспортирует шаблон.
Создание экземпляров jinja2.runtime.Context()
не поддерживается и не является полезным, поскольку он создается автоматически на различных этапах оценки шаблона и не должно создаваться вручную.
Контекст Context
неизменен. Изменения в родительском элементе не должны происходить, а изменения в переменных разрешены только из сгенерированного кода шаблона. Фильтры шаблонов и глобальные функции, помеченные как contextfunction()
получают активный контекст, переданный в качестве первого аргумента, и им разрешен доступ к контексту только для чтения.
Контекст шаблона поддерживает операции, доступные dict
(словарям Python), но только для чтения (get
, keys
, values
, items
, iterkeys
, itervalues
, iteritems
, __getitem__
, __contains__
). Кроме того, существует метод Context.resolve()
, который не вызывает ошибку KeyError
, но возвращает объект Undefined
для отсутствующих переменных.
Context
.Context.parent
глобальные переменные шаблона,Context.vars
локальные переменные шаблона,Context.environment
окружение, в которую загружен шаблон,Context.exported_vars
все имена, которые экспортирует шаблон,Context.name
имя загруженного шаблона,Context.blocks
текущий словарь блоков шаблона,Context.eval_ctx
контекст оценки шаблона,Context.call()
вызывает вызываемый объект,Context.get()
находит переменную по имени или возвращает значение по умолчанию,Context.get_all()
полный контекст как словарь,Context.get_exported()
новый словарь с экспортированными переменными,Context.resolve()
ищет переменную как dict.get()
,Context.resolve_or_missing()
находит переменную по имени или возвращает missing
.Context.parent
:Атрибут Context.parent
- это словарь (только для чтения) глобальных переменных, которые ищет шаблон. Они могут поступать из другого контекста, из Environment.globals
или Template.globals
, или указывать на словарь, созданный путем объединения глобальных переменных с переменными, переданными в функцию рендеринга. Его нельзя изменять.
Context.vars
:Атрибут Context.vars
представляет собой локальные переменные шаблона. Этот словарь содержит функции среды окружения и контекста из Context.parent
, а также локальные модификации и экспортированные переменные из шаблона. Шаблон изменит этот словарь во время оценки шаблона, но фильтры и контекстные функции не могут изменять его.
Context.environment
:Атрибут Context.environment
среда окружения, в которую загружен шаблон.
Context.exported_vars
:Атрибут Context.exported_vars
это множество содержит все имена, которые экспортирует шаблон. Значения имен указаны в словаре vars
. Чтобы получить копию экспортированных переменных как словарь, можно использовать метод Context.get_exported()
.
Context.name
:Атрибут Context.name
это имя загруженного шаблона, владеющего этим контекстом.
Context.blocks
:Атрибут Context.blocks
это словарь с текущим словарем блоков в шаблоне. Ключи в этом слове - это имена блоков, а значения - список зарегистрированных блоков. Последний элемент в каждом списке - это текущий активный блок (последний в цепочке наследования).
Context.eval_ctx
:Атрибут Context.eval_ctx
это текущий контекст оценки шаблона.
Context.call(callable, *args, **kwargs)
:Метод Context.call()
вызывает вызываемый объект с предоставленными аргументами и ключевыми словами, но вставляет активный контекст или среду в качестве первого аргумента соответственно, если вызываемый объект является contextfunction()
или environmentfunction()
.
Context.get(key, default=None)
:Метод Context.get()
находит переменную по имени key
или возвращает значение по умолчанию default
, если ключ не найден.
Context.get_all()
:Метод Context.get_all()
возвращает полный контекст как словарь, включая экспортированные переменные. По причинам оптимизации это может не вернуть реальную копию, поэтому будьте осторожны с ее использованием.
Context.get_exported()
:Метод Context.get_exported()
возвращает новый словарь с экспортированными переменными.
Context.resolve(key)
:Метод Context.resolve()
ищет переменную как метод словаря dict.get()
, но возвращает объект Undefined
для отсутствующих переменных.
Если необходимо добавить настраиваемое поведение, то переопределите метод Context.resolve_or_missing()
, т.к. он использует различные функции поиска.
Context.resolve_or_missing(key)
:Метод Context.resolve_or_missing()
находит переменную по имени key
или возвращает missing
, если ключ key
не найден.
Чтобы добавить настраиваемое поведение поиска необходимо переопределить этот метод. Методы Context.resolve()
, Context.get()
и Context.__getitem__()
используют этот метод. Не вызывайте этот метод напрямую.