私が見る限り、オブジェクトがJinja2のListインスタンスであるかどうかをテストする方法はありません。 1つ目は正しいですか、2つ目は、誰かがJinja2にカスタムテスト/拡張機能を実装しましたか?どんな助けでも素晴らしいでしょう。
これは、jinja2でカスタムフィルターを使用して簡単に行うことができます。
まず、テストメソッドを作成します。
def is_list(value):
return isinstance(value, list)
そしてそれをカスタムフィルターとして追加します:
j = jinja2.Jinja2(app)
j.environment.filters.update({
'is_list': is_list,
})
私はそれをこのようにしました:
{% if var is iterable and var is not string %}
私の設定では、値を文字列またはJinjaテンプレートに含まれる文字列のリストのいずれかにしたいと考えています。だから私が本当に気にしたのは文字列とリストではなく、単一のアイテムと複数のアイテムだった。この回答は、ユースケースが類似している場合に役立ちます。
「リストですか?」の組み込みテストがないので。文字列も拒否するため、APIデザインからパターンを借りて、単一オブジェクトをPython側のリストにラップし、次にJinja側のリストの長さを確認しました。
Python:
_context = { ... }
# ex. value = 'a', or ['a', 'b']
if not isinstance(value, list):
value = [value]
context['foo'] = value
_
ジンジャ:
_{% if foo|length == 1 %}
single-item list
{% Elif foo|length > 1 %}
multi-item list
{% endif %}
_
また、表示目的でアイテムセパレーターを追加するだけの場合は、明示的な長さチェックをスキップして、{{ value|join(', ') }}
だけを実行できます。
Jinjaには多くの組み込みテストがあります。あなたはおそらく iterable を探しています。
{% if var is iterable %}