如何阅读jinja上下文变量

时间:2011-11-07 10:11:35

标签: python jinja2

在我的主线中,我想在渲染模板后从当前模板上下文中读取变量。 此变量已被“设置”为模板的bij。我可以在上下文函数中访问变量,但是如何在主线中访问它。

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

更新:我在webapp2源代码中找到了一个解决方案。该行是:

b = template.module.b

2 个答案:

答案 0 :(得分:3)

我发现,在webapp2-extras源的帮助下,可以在python主线中访问当前的jinja上下文。另请参阅:jinja文档中的类jinja2.Template。

Python主线:

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

感谢您的帮助。

答案 1 :(得分:0)

我不建议你做你要求的事情,而是考虑一个更好的解决方案,无论如何这里是hacky答案:

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'