在Pyramid应用程序中注册自定义Jinja2过滤器

MFB*_*MFB 4 python jinja2 pyramid

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

[app:myapp]
#...
jinja2.filters =
    islist = myapp.machines.islist
Run Code Online (Sandbox Code Playgroud)

我的功能很简单:

def islist(item):
    return isinstance(item, list)
Run Code Online (Sandbox Code Playgroud)

我可以告诉正在读取ini文件中的过滤器设置行,因为如果我islist弄错了函数的虚线路径,则该应用程序将引发错误。

但是,当我尝试islist在模板中使用该函数时,该模板找不到该函数。

{% if islist([]) %}a list{% else %}not a list{% endif %}
Run Code Online (Sandbox Code Playgroud)

结果:

UndefinedError: 'islist' is undefined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??任何帮助都是极好的。

Mic*_*kel 5

我认为过滤器不会在名称空间中作为函数公开,而是仅通过管道调用。例如{{ foo | some_filter }}