Как я могу проверить размер коллекции в шаблоне Django?

147

У меня есть список в моем шаблоне Django. Я хочу сделать что-то, только если размер списка больше нуля.

Я попробовал myList|lengthи , myList|length_isно они не увенчались успехом.

Я искал по всему и не вижу примеров. Как я могу это проверить?

MrDatabase
источник

Ответы:

279

См. Https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : просто используйте, чтобы воспроизвести их пример:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Алекс Мартелли
источник
Я всегда путаюсь с шаблонизацией дзиндзя во Фляске и с джанго. Спасибо за информацию. Действительно полезно.
Doogle
7
lengthФильтр также , кажется, работает в условных блоках. напр.{% if athlete_list|length > 1 %}...{% endif %}
Thismatters
93

Если вы используете недавний Django, в списке изменений 9530 появился блок {% empty%}, позволяющий писать

{% for athlete in athlete_list %}
  ...
{% empty %}
  No athletes
{% endfor %}

Полезно, когда вы хотите выполнить итерации по непустому списку.

Дейв В. Смит
источник
20

Список считается Falseтаковым, если в нем нет элементов, поэтому вы можете сделать что-то вроде этого:

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}
mipadi
источник
13

Если вы пробовали myList | length и myList | length_is и не получили желаемых результатов, вам следует использовать myList.count

Нилеш Тигаре
источник
6

Вы можете попробовать с:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 
Atarx
источник
1

Collection.count без скобки

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
Ахмед Адевале
источник
1

Мне нужна длина коллекции, чтобы решить, следует ли отображать таблицу <thead></thead>

но не знаю, почему @Django 2.1.7 выбранный ответ потерпит неудачу (пусто) forloopпосле этого.

Я должен использовать, {% if forloop.first %} {% endif %}чтобы преодолеть:

<table>
    {% for record in service_list %}
        {% if forloop.first %}
            <thead>
            <tr>
                <th>日期</th>
            </tr>
            </thead>
        {% endif %}
        <tbody>
        <tr>
            <td>{{ record.date }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
CK
источник