在Jinja2中禁止“None”输出为string
当值为None
时,如何说服Jinja2不打印"None"
?
我有一个字典中的条目数量,我想在一个单一的循环输出的一切,而不是有不同的关键字的特殊情况。 如果我有一个值None
( NoneType
不是string),那么string"None"
被插入到模板渲染结果中。
试图使用{{ value or '' }}
来压制它,因为它也会replace数字值零。
在传递给Jinja2之前,是否需要过滤字典?
{{ value if value is not None }}
很好。
如果这提出了一个关于没有别的尝试使用一个else的错误..
{{ value if value is not None else '' }}
另一个select是在环境中使用finalize
钩子:
>>> import jinja2 >>> e = jinja2.Environment() >>> e.from_string("{{ this }} / {{ that }}").render(this=0, that=None) u'0 / None'
但:
>>> def my_finalize(thing): ... return thing if thing is not None else '' ... >>> e = jinja2.Environment(finalize=my_finalize) >>> e.from_string("{{ this }} / {{ that }}").render(this=0, that=None) u'0 / '
默认filter :
{{ value|default("", True) }}
根据这个来自Pocco邮件列表的post: https : //groups.google.com/d/msg/pocoo-libs/SQ9ubo_Kamw/TadIdab9eN8J
Armin Ronacher(Jinja2 / Flask的创作者等)推荐以下“pythonic”片段:
{{ variable or 0 }}
{{ variable or '' }}
这里的概念再一次明确地比隐含的更好。
编辑:选定的答案绝对是正确的。 我没有遇到过模板variables是string或数字零的情况,所以上面的代码片段可能有助于减less模板中的代码噪声。
自定义filter可以解决这个问题。 声明如下:
def filter_supress_none(val): if not val is None: return val else: return ''
像这样安装它:
templating_environment.filters['sn'] = filter_supress_none
像这样使用它:
{{value|sn}}