我想从jinja模板调用python函数。在doucmentation(http://jinja.pocoo.org/docs/2.10/templates/请参阅Assignments)中提供以下示例:
{% set key, value = call_something() %}
但是以下来源不起作用。
import jinja2
@jinja2.contextfunction
def hw():
return "World"
template = jinja2.Template('{% set test = hw() %} Hello {{ test }}!')
template.render(name='John Doe')
Error: ... UndefinedError: 'hw' is undefined
有人知道如何解决问题吗?! 感谢所有人!
答案 0 :(得分:1)
您可以在template.render
函数中将其作为key=value
对提供,就像您提供name
变量一样。
import jinja2
def hw():
return "World"
template = jinja2.Template('{% set test = hw() %} Hello {{ test }}!')
print(template.render(name='John Doe', hw=hw))
或者,如果您计划使用Jinja environment,您可以在创建任何模板之前将其添加到globals
dictionary,如果您希望该功能是可从所述环境中的每个模板访问。
import jinja2
def hw():
return "World"
template = """
{% set test = hw() %} Hello {{ test }}!
"""
env = jinja2.Environment()
env.globals['hw'] = hw
template = env.from_string(template)
print(template.render(name='John Doe'))
我已在此处使用from_string
方法加载您的模板,但您可能想要调查的环境有loaders system个整数。