我已经成功地通过使用自定义过滤器从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!
{{func()}}
呈现输出。{% call func() %}{%endcall%}
使用caller
参数调用func()
。在在jinja中,在模板中调用python函数而不呈现它或其他模板副作用的方法似乎并不简单。我想出的解决办法是:
将评论总结成答案:
通过将函数添加到过滤器中来调用函数的能力并不是实现这一点的正确方法,因为(正如Wooble指出的那样),我并不打算过滤任何东西。在
相反,只需将函数添加到模板中_全球环境公司名称:
嗯,它们是过滤器,所以它们希望过滤一些东西。如果动机是希望函数能够在不传递任何参数的情况下从模板外部调用,请将签名更改为:
然后忽略这些参数;如果没有传递任何参数或任何数量的参数,它就可以工作了。在
相关问题 更多 >
编程相关推荐