在我的主线中,我想在渲染模板后从当前模板上下文中读取变量。 此变量已被“设置”为模板的bij。我可以在上下文函数中访问变量,但是如何在主线中访问它。
result = template.render({'a' : "value-1" })
# in the template {% set b = "value-2" %}
b = ?
更新:我在webapp2源代码中找到了一个解决方案。该行是:
b = template.module.b
答案 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'