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>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
<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”)
Method 2
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 %}
Method 3
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}}
Method 4
If for loop with array is used then you can use the following
{% for i in range(array|length) %}
array[i]
{% endfor %}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0