在Jinja2中禁止“None”输出为string

当值为None时,如何说服Jinja2不打印"None"

我有一个字典中的条目数量,我想在一个单一的循环输出的一切,而不是有不同的关键字的特殊情况。 如果我有一个值NoneNoneType不是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}}