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

2024-09-28 22:19:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地通过使用自定义过滤器从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

模板:

^{pr2}$

输出:

working? yeah!

Tags: 方法函数代码env过滤器jinja2参数def
3条回答

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

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

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

将评论总结成答案:

通过将函数添加到过滤器中来调用函数的能力并不是实现这一点的正确方法,因为(正如Wooble指出的那样),我并不打算过滤任何东西。在

相反,只需将函数添加到模板中_全球环境公司名称:

template_globals.filters['ctest'] = ctest

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

def ctest(*args):

然后忽略这些参数;如果没有传递任何参数或任何数量的参数,它就可以工作了。在

相关问题 更多 >