Get lengths of a list in a jinja2 template

Question:

How do I get the number of elements in a list in jinja2 template?

For example, in Python:

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

and in jinja2

<span>You have {{what goes here?}} products</span>
Asked By: flybywire

||

Answers:

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

You can also use this syntax in expressions like

{% if products|length > 1 %}

jinja2’s builtin filters are documented here; and specifically, as you’ve already found, length (and its synonym count) is documented to:

Return the number of items of a sequence or mapping.

So, again as you’ve found, {{products|count}} (or equivalently {{products|length}}) in your template will give the “number of products” (“length of list”)

Answered By: Alex Martelli

Alex’ comment looks good but I was still confused with using range.
The following worked for me while working on a for condition using length within range.

{% 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 %}
Answered By: Ashwin

I’ve experienced a problem with length of None, which leads to Internal Server Error: TypeError: object of type ‘NoneType’ has no len()

My workaround is just displaying 0 if object is None and calculate length of other types, like list in my case:

{{'0' if linked_contacts == None else linked_contacts|length}}
Answered By: Dmitri

If for loop with array is used then you can use the following

{% for i in range(array|length) %}
          array[i]
{% endfor %}
Answered By: Ali Hussein
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.