Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在金字塔应用程序中注册自定义Jinja2过滤器_Python_Pyramid_Jinja2 - Fatal编程技术网

Python 在金字塔应用程序中注册自定义Jinja2过滤器

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函数时,模板找不到该函

我试过几种方法。根据,我已在我的应用程序的ini中完成此操作:

[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
向其添加您自己的“测试”。当然!我忘了你可以从视图中传递函数等。当然,这是最简单的。再次感谢!