如何在 jinja2 模板中调用不带参数的 python 函数

chr*_*sst 5 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
Run Code Online (Sandbox Code Playgroud)

模板:

Working? {{ junk|ctest }}
Run Code Online (Sandbox Code Playgroud)

输出:

working? yeah!
Run Code Online (Sandbox Code Playgroud)

chr*_*sst 1

将评论总结为答案:

通过将函数添加到过滤器来调用函数的能力并不是真正解决此问题的正确方法,因为(正如 Wooble 指出的)我不希望过滤任何内容。

相反,该函数只需添加到 template_env.globals 中:

template_globals.filters['ctest'] = ctest
Run Code Online (Sandbox Code Playgroud)