如何在jinja2模板中调用没有参数的python函数

时间:2012-07-25 19:27:00

标签: python jinja2

我已经设法通过使用自定义过滤器从jinja2调用python函数,但我似乎只能使用一个或多个参数调用函数。在下面我必须传递一个垃圾参数,以便将ctest视为函数而不是变量。

如果我只是致电{{ ctest() }},它也无效。

是否有不同的方法强制将其作为函数调用,还是应该使用其他方法?

代码:

def ctest(stuff):
    return "yeah!"

template_env = jinja2.Environment (loader = jinja2.FileSystemLoader(template_file_root))
#custom filters
template_env.filters['ctest'] = ctest

模板:

Working? {{ junk|ctest }}

输出:

working? yeah!

3 个答案:

答案 0 :(得分:1)

将评论总结为答案:

通过将函数添加到过滤器来调用函数的能力实际上并不是解决此问题的正确方法(因为Wooble指出)我不打算过滤任何东西。

相反,该功能只需要添加到template_env.globals:

template_globals.filters['ctest'] = ctest

答案 1 :(得分:0)

嗯,他们会过滤,所以他们希望过滤一些东西。如果您希望在不传递任何参数的情况下从模板外部调用函数,请将签名更改为:

def ctest(*args):

然后忽略参数;如果它没有传递任何参数或任何数量的参数,它将起作用。

答案 2 :(得分:0)

{{func()}}呈现输出。 {% call func() %}{%endcall%}使用func()参数调用caller

在jinja中,似乎没有简单的方法在模板中调用python函数而不渲染它或其他模板副作用。我想出的解决方法是:

{% if func() %}{% endif %}