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


147

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

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

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

Ответы:


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 %}

13

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


6

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

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.