ChatGPT解决这个技术问题 Extra ChatGPT

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

我的 Django 模板中有一个列表。只有当列表的大小大于零时,我才想做一些事情。

我尝试过 myList|lengthmyList|length_is,但都没有成功。

我已经搜索了所有内容,但没有看到任何示例。我怎样才能检查这个?


M
MichielB

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

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

|长度我总是对 Flask 中的 jinja 模板和 django 感到困惑。谢谢提供信息。真的很有帮助。
length 过滤器似乎也适用于条件块。例如{% if athlete_list|length > 1 %}...{% endif %}
有没有 inline (on lineI) 选项?
D
Dave W. Smith

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

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

当您想要做的事情涉及对可能为空的列表进行特殊处理时很有用。


m
mipadi

如果列表没有元素,则认为它是 False,因此您可以执行以下操作:

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

N
Nilesh Tighare

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


我对它有多少赞成票感到震惊......如果 myListlist,那么这会调用 list.count(),这会引发一个错误,该错误在模板中被屏蔽并被视为错误值。 count 方法是统计与传入值匹配的实例数。但是,如果 myList 是查询集,则此方法有效。
A
Atarx

您可以尝试:

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

这仅适用于查询集,但不适用于数组长度
T
Tim Tisdall

这有效:

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

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


A
Ahmed Adewale

Collection.count 无括号

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

C
C.K.

我需要集合长度来决定是否应该呈现表 <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>