Как читать контекстную переменную jinja

1

В моей основной строке я хочу прочитать переменную из контекста текущего шаблона после визуализации шаблона. Эта переменная была "установлена" в шаблоне. Я могу получить доступ к переменной в контексте функции, но как получить доступ к ней в моей основной линии.

result = template.render({'a' : "value-1" })
# in the template {% set b = "value-2" %}
b = ?

Обновление: я нашел решение в источнике webapp2. Линия:

b = template.module.b
Теги:
jinja2

2 ответа

3
Лучший ответ

Я узнал, с помощью источника webapp2-extras, что доступ к текущему контексту jinja возможен в основной строке python. См. Также: class jinja2.Template в документации jinja.

Python mainline:

result = template.render({'a' : "value-1" })
# in the template {% set b = "value-2" %}
b = template.module.b

Спасибо за вашу помощь.

  • 0
    Отличная находка! Спасибо, что поделился.
0

Я не рекомендую вам делать то, о чем вы просите, и вместо этого подумайте о лучшем решении, так или иначе, вот хакерский ответ:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню