如何在Django模板中检查集合的大小?

时间:2009-05-23 17:47:20

标签: django django-templates

我的Django模板中有一个列表。我想只在列表大小大于零时才做某事。

我尝试了myList|lengthmyList|length_is,但他们没有成功。

我到处搜索过,看不到任何例子。我怎么检查这个?

8 个答案:

答案 0 :(得分:228)

请参阅https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if:使用,重现他们的示例:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}

答案 1 :(得分:86)

如果您使用的是最近的Django,changelist 9530引入了{%empty%}块,允许您编写

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

当您想要做的事情涉及迭代非空列表时很有用。

答案 2 :(得分:20)

如果列表没有元素,则该列表被视为False,因此您可以执行以下操作:

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}

答案 3 :(得分:12)

如果您尝试了myList | length和myList | length_is并且没有获得所需的结果,那么您应该使用myList.count

答案 4 :(得分:3)

您可以尝试:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 

答案 5 :(得分:0)

Collection.count没有括号

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}

答案 6 :(得分:0)

我需要收集长度来决定是否应该渲染表<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>

答案 7 :(得分:0)

这有效:

{% if myList|length %}
    Do something!
{% endif %}

为什么这里有这么多答案以及为什么有这么多混乱是因为这并不总是有效。我认为一度模板过滤器不能用于 if 语句的参数,后来添加了这一点。现在还可以执行诸如 {% if myList|length >= 3 %} 之类的操作。过滤器应执行等效于 len(myList) 的操作,因此可以处理的任何类型的对象也可以处理 |length 过滤器。