Python 在金字塔应用程序中注册自定义Jinja2过滤器
我试过几种方法。根据,我已在我的应用程序的ini中完成此操作:Python 在金字塔应用程序中注册自定义Jinja2过滤器,python,pyramid,jinja2,Python,Pyramid,Jinja2,我试过几种方法。根据,我已在我的应用程序的ini中完成此操作: [app:myapp] #... jinja2.filters = islist = myapp.machines.islist 我的职能很简单: def islist(item): return isinstance(item, list) 我可以告诉您正在读取ini文件中的过滤器设置行,因为如果我的islist函数的虚线路径错误,应用程序将抛出错误 但是,当我尝试在模板中使用islist函数时,模板找不到该函
[app:myapp]
#...
jinja2.filters =
islist = myapp.machines.islist
我的职能很简单:
def islist(item):
return isinstance(item, list)
我可以告诉您正在读取ini文件中的过滤器设置行,因为如果我的islist
函数的虚线路径错误,应用程序将抛出错误
但是,当我尝试在模板中使用islist
函数时,模板找不到该函数
{% if islist([]) %}a list{% else %}not a list{% endif %}
结果如下:
UndefinedError: 'islist' is undefined
我做错了什么??任何帮助都会很棒。我认为过滤器不会作为名称空间中的函数公开,而只是通过管道调用。例如
{{foo | some_filter}}
啊,这是有道理的。那么我应该用测试来代替吗?我可以用同样的方法添加自定义测试吗?我想不出如何使用islist
测试作为过滤器。顺便说一句,过滤器可以工作..谢谢,但是,我如何实际使用它?实际上不再需要自定义islist
测试。使用{%实现了同样的效果,如果i是可编辑的,而不是字符串,而不是映射%}
;)向金字塔中的模板公开函数的常用方法是通过BeforeRender
事件,或者通过将它们作为有效负载的一部分从视图中返回。最后一种方法是访问Jinja2环境
对象,并通过env.tests['islist']=islist
向其添加您自己的“测试”。当然!我忘了你可以从视图中传递函数等。当然,这是最简单的。再次感谢!