jinja2テンプレートでリストの長さを取得する


315

jinja2テンプレートのリストの要素数を取得するにはどうすればよいですか?

たとえば、Pythonの場合:

print(template.render(products=[???]))

そしてjinja2で

<span>You have {{what goes here?}} products</span>

回答:


533
<span>You have {{products|length}} products</span>

この構文は、次のような式でも使用できます。

{% if products|length > 1 %}

jinja2の組み込みフィルターはここに記載されています。具体的には、すでに見つけたようにlength(およびその同義語count)は次のように文書化されています。

シーケンスまたはマッピングのアイテム数を返します。

したがって、あなたが見つけたように、テンプレートで{{products|count}}(または同等に{{products|length}})「製品の数」(「リストの長さ」)が得られます。


未定義もチェックできますか?私は{%if products is none ...%}を使用する必要があります。これはかなり疲れます
Nam G VU

@wvxvwこれは機能します:リスト、dictなどである{% set item_count = items | length %}限りitems
kbolino

7

アレックスのコメントは良さそうですが、私はまだ範囲の使用に混乱していました。以下は、範囲内の長さを使用してfor条件で作業しているときに私にとってはうまくいきました。

{% for i in range(0,(nums['list_users_response']['list_users_result']['users'])| length) %}
<li>    {{ nums['list_users_response']['list_users_result']['users'][i]['user_name'] }} </li>
{% endfor %}

2

Noneの長さで問題が発生したため、内部サーバーエラーが発生します:TypeError:タイプ 'NoneType'のオブジェクトにlen()がありません

私の回避策は、オブジェクトがNoneの場合に0を表示し、私の場合のリストのような他のタイプの長さを計算することです:

{{'0' if linked_contacts == None else linked_contacts|length}}

none組み込み関数を使用して、Noneをテストできます。詳細はこちらをご覧くださいhttps : //jinja.palletsprojects.com/en/2.10.x/templates/#none。例はこのスレッドにあります:https
//stackoverflow.com/questions/19614027/jinja2-template-variable-if-none-object-set-a-default-value
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.