Respostas:
<span>You have {{products|length}} products</span>
Você também pode usar esta sintaxe em expressões como
{% if products|length > 1 %}
Os filtros internos do jinja2 estão documentados aqui ; e, especificamente, como você já encontrou length(e seu sinônimo count) está documentado para:
Retorne o número de itens de uma sequência ou mapeamento.
Então, novamente, como você encontrou {{products|count}}(ou equivalente {{products|length}}) em seu modelo, você fornecerá o "número de produtos" ("comprimento da lista")
{% set item_count = items | length %}contanto que itemsé uma lista, dict, etc.
O comentário de Alex parece bom, mas eu ainda estava confuso com o uso do alcance. O seguinte funcionou para mim enquanto trabalhava em uma condição for usando comprimento dentro do alcance.
{% 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 %}
Ocorreu um problema com o comprimento de None, que leva ao erro interno do servidor: TypeError: o objeto do tipo 'NoneType' não possui len ()
Minha solução alternativa é apenas exibir 0 se o objeto for None e calcular o comprimento de outros tipos, como lista no meu caso:
{{'0' if linked_contacts == None else linked_contacts|length}}