簡體   English   中英

在 Jinja2 中將“無”輸出抑制為字符串

[英]Suppress "None" output as string in Jinja2

當值為None時,如何說服 Jinja2 不打印"None"

我在字典中有許多條目,我想在一個循環中輸出所有內容,而不是為不同的關鍵字設置特殊情況。 如果我的值為NoneNoneType不是字符串),則字符串"None"將插入到模板呈現結果中。

嘗試使用{{ value or '' }}來抑制它效果太好,因為它也會替換數值零。

在將字典傳遞給 Jinja2 進行渲染之前,我是否需要過濾字典?

在新版本的 Jinja2 (2.9+) 中:

{{ value if value }}

在舊版本的 Jinja2(2.9 之前)中:

{{ value if value is not none }}效果很好。

如果這引發了關於沒有 else 的錯誤,請嘗試使用 else..

{{ value if value is not none else '' }}

另一種選擇是在環境中使用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 / '

默認過濾器

{{ value|default("", True) }}

自定義過濾器可以解決這個問題。 聲明如下:

def filter_suppress_none(val):
    if not val is None:
        return val
    else:
        return ''

像這樣安裝它:

templating_environment.filters['sn'] = filter_suppress_none

像這樣使用它:

{{value|sn}}

根據 Pocco 郵件列表中的這篇文章: https ://groups.google.com/d/msg/pocoo-libs/SQ9ubo_Kamw/TadIdab9eN8J

Armin Ronacher(Jinja2/Flask 等的創建者...)推薦以下“pythonic”片段:

{{ variable or 0 }} {{ variable or '' }}

這里的概念再次表明,顯式優於隱式。

編輯:所選答案絕對是正確的。 我還沒有真正遇到過模板變量可以是字符串或數字零的情況,所以上面的代碼片段可能有助於減少模板中的代碼噪音。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM