59

"None"値がのときにJinja2を印刷しないように説得するにはどうすればよいNoneですか?

辞書に多数のエントリがあり、さまざまなキーワードに特別なケースを設定するのではなく、すべてを1つのループで出力したいと考えています。None(文字列ではなく)の値がある場合NoneType、文字列"None"はテンプレートレンダリング結果に挿入されます。

を使用して抑制しようとすると {{ value or '' }}、数値ゼロも置き換えられるため、うまく機能します。

レンダリングのために辞書をJinja2に渡す前に、辞書をフィルタリングする必要がありますか?

4

5 に答える 5

65

Jinja2 (2.9+) の新しいバージョンでは:

{{ value if value }}

古いバージョンの Jinja2 (2.9 より前) の場合:

{{ value if value is not none }}よく働く。

これにより、else がないというエラーが発生する場合は、else .. を使用してみてください。

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

于 2012-06-21T21:01:48.980 に答える
34

別のオプションは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 / '
于 2013-07-15T19:10:07.520 に答える
26

デフォルトのフィルター:

{{ value|default("", True) }}
于 2012-06-21T21:35:38.620 に答える