kra*_*r65 2 python jinja2 flask
在我正在使用Flask构建的网站中,我想测试变量是否为None.令我惊讶的是,这个简单的东西不起作用:
{% if my_var is not None %}
{{ my_var }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这引发了一个错误:TemplateAssertionError: no test named 'None'.所以按照这个例子,我写了一个简单的自定义测试:
def is_none(var):
if var is None:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我想在Flask中注册如下:
from jinja2 import environment
environment.tests['None'] = is_none
Run Code Online (Sandbox Code Playgroud)
但这引发了一个错误说AttributeError: 'module' object has no attribute 'tests'.
有谁知道我在这里做错了什么?或者文档是完全错误的?欢迎所有提示!
[编辑]好的,我得到了更多.我现在用这个注册测试:
from jinja2 import Environment
environment = Environment()
environment.tests['None'] = is_none
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在我的模板中使用它时,我仍然得到错误说TemplateAssertionError: no test named 'None'.有任何想法吗?
nat*_*own 10
要注册自定义测试,请使用以下装饰器:
@app.template_test("none")
def is_none(obj):
return obj is None
Run Code Online (Sandbox Code Playgroud)
然后你可以is_none用作测试:{% if my_var is none %}.正如dirn指出的那样,这复制了内置测试,但我想我会回答你原来的问题.
文档位于http://flask.pocoo.org/docs/latest/api/#flask.Flask.template_test
Jinja有一个内置的None被叫测试none.
{% if variable is none %}
The variable is none.
{% endif %}
Run Code Online (Sandbox Code Playgroud)