Jinja2 - 使用Set(Assignments)来调用customer_function

时间:2017-12-23 13:35:18

标签: python templates jinja2

我想从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

有人知道如何解决问题吗?! 感谢所有人!

1 个答案:

答案 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个整数。