Python 如何在Jinja2(烧瓶)中注册自定义测试?

Python 如何在Jinja2(烧瓶)中注册自定义测试?,python,flask,jinja2,Python,Flask,Jinja2,在我正在构建的网站中,我想测试一个变量是否为无。但令我惊讶的是,像这样简单的事情根本不起作用: {% if my_var is not None %} {{ my_var }} {% endif %} 这会引发一个错误:TemplateAssertionError:没有名为“None”的测试。。下面,我编写了一个简单的自定义测试: def is_none(var): if var is None: return True else: re

在我正在构建的网站中,我想测试一个变量是否为无。但令我惊讶的是,像这样简单的事情根本不起作用:

{% if my_var is not None %}
    {{ my_var }}
{% endif %}
这会引发一个错误:
TemplateAssertionError:没有名为“None”的测试。
。下面,我编写了一个简单的自定义测试:

def is_none(var):
    if var is None:
        return True
    else:
        return False
我想在烧瓶中登记如下:

from jinja2 import environment
environment.tests['None'] = is_none
但这会抛出一个错误,说明
AttributeError:“module”对象没有属性“tests”

有人知道我做错了什么吗?还是文档根本就错了?欢迎所有提示

[编辑] 好吧,我还有一点。我现在使用以下方法注册测试:

from jinja2 import Environment
environment = Environment()
environment.tests['None'] = is_none
但是当我尝试在模板中使用它时,仍然会出现错误,说
TemplateAssertionError:no测试名为'None'
。有什么想法吗?

Jinja有一个好主意


要注册自定义测试,请使用以下装饰程序:

@app.template_test("none")
def is_none(obj):
    return obj is None
然后您可以使用
is_none
作为测试:
{%if my_var is none%}
。正如dirn指出的,这重复了一个内置测试,但我想我会回答您最初的问题


文档位于

您可以使用。根据flask文档,要注册jinja2过滤器,您需要使用app.jinja_env.filters['None']=is_None。链接到文档:单击是@dirn是正确的。你可以使用内置的金甲2filter@dim-太棒了!我没有注意到那个测试,非常感谢!你能补充你的评论作为回答吗?这样我就可以接受了?谢谢学得好。但我把这归类为一个令人讨厌的问题。这就是我来的目的,而不是为了一个像公认的答案那样的具体答案。谢谢
@app.template_test("none")
def is_none(obj):
    return obj is None