Jinja: {%empty%}タグを取得できますか?

作成日 2011年12月02日  ·  5コメント  ·  ソース: pallets/jinja

Djangoには{%empty%}と呼ばれるこの本当にクールなタグがあります。これにより次のことが可能になります。

{% for item in list %}
    <tr><td>{{ item }}</td></tr>
{% empty %}
    <tr><td>Nothing to show!</td></tr>
{% endfor %}

の略です

{% if list %}
    {% for item in list %}
        <tr><td>{{ item }}</td?</tr>
    {% endfor %}
{% else %}
    <tr><td>Nothing to show!</td></tr>
{% endif %}

ジンジャに切り替えてから、このタグを本当に見逃してしまいました:(

最も参考になるコメント

それはすでに存在します。 forループで{% else %}を使用します。 残念ながら、Djangoが空を作成する前に他にありましたが、Djangoのセマンティクスに一致するように名前を変更するのはちょっと奇妙です。

全てのコメント5件

それはすでに存在します。 forループで{% else %}を使用します。 残念ながら、Djangoが空を作成する前に他にありましたが、Djangoのセマンティクスに一致するように名前を変更するのはちょっと奇妙です。

ああなるほど。 たぶん、それをdjangoセクションの下の「他のテンプレートエンジンからの切り替え」にメモしてください。

これは、スイッチングのドキュメントには記載されていません。 これは、コントロールの構造に記載されています:ドキュメント用ですが、スイッチングドキュメントに含めると便利です...

コードのlistがジェネレーターであり、 forおよびifブロックがPythonと同じように機能する場合、 if-for構造は問題を解決しません。ジェネレーターは常に真実であるため、さらにそのような構成はemptyブロックよりも慣用的ではありません。

ループが実行されたかどうかを確認するフラグを追加したり、 NameError: name 'item' is not definedを確認したり、Jinjaレベルでヘルパー変数をlist(generator)に追加したりできるかどうかはわかりません。 そうでない場合、唯一の解決策は、 emptyブロックを追加するか、Python開発者に空のジェネレーターを偽造するように説得することです( StopIterationを処理してポップされたアイテムを「プッシュバック」することで醜いチェックを避けるため)。

Jinjaのelseブロックは、すでにDjangoのemptyブロックと同じように機能します。 ここでは変更は必要ありません。

このページは役に立ちましたか?
0 / 5 - 0 評価