#python #jinja2
#python #jinja2
Вопрос:
В моей основной строке я хочу прочитать переменную из текущего контекста шаблона после того, как шаблон был отрисован. Эта переменная была «установлена» в шаблоне. Я могу получить доступ к переменной в контекстной функции, но как получить к ней доступ в моей основной строке.
result = template.render({'a' : "value-1" })
# in the template {% set b = "value-2" %}
b = ?
Обновление : я нашел решение в исходном коде webapp2. Строка :
b = template.module.b
Ответ №1:
Я выяснил, с помощью источника webapp2-extras, что доступ к текущему контексту jinja возможен в основной строке python. Смотрите также: класс jinja2.Шаблон в документации jinja.
Основная строка Python :
result = template.render({'a' : "value-1" })
# in the template {% set b = "value-2" %}
b = template.module.b
Спасибо за вашу помощь.
Ответ №2:
Я не рекомендую вам делать то, что вы просите, и вместо этого думать о лучшем решении, в любом случае, вот хакерский ответ:
from jinja2 import Template
class MyImprovedTemplate(Template):
def render(self, *args, **kwargs):
# this is copy-pasted from jinja source, context added to return
vars = dict(*args, **kwargs)
context = self.new_context(vars)
try:
return context, concat(self.root_render_func(context))
except Exception:
exc_info = sys.exc_info()
return context, self.environment.handle_exception(exc_info, True)
>>> t = MyImprovedTemplate('{% set b = 2 %}')
>>> context, s = t.render()
>>> context['b']
'2'
Комментарии:
1. Я нашел другое решение своей проблемы, просмотрев код webapp2. Строка: b = template.module.b