我的 Django 模板中有一个列表。只有当列表的大小大于零时,我才想做一些事情。
我尝试过 myList|length
和 myList|length_is
,但都没有成功。
我已经搜索了所有内容,但没有看到任何示例。我怎样才能检查这个?
请参阅 https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if :只需使用,重现他们的示例:
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% else %}
No athletes.
{% endif %}
如果您使用的是最近的 Django,changelist 9530 引入了一个 {% empty %} 块,允许您编写
{% for athlete in athlete_list %}
...
{% empty %}
No athletes
{% endfor %}
当您想要做的事情涉及对可能为空的列表进行特殊处理时很有用。
如果列表没有元素,则认为它是 False
,因此您可以执行以下操作:
{% if mylist %}
<p>I have a list!</p>
{% else %}
<p>I don't have a list!</p>
{% endif %}
如果您尝试了 myList|length 和 myList|length_is 并且没有得到想要的结果,那么您应该使用 myList.count
myList
是 list
,那么这会调用 list.count()
,这会引发一个错误,该错误在模板中被屏蔽并被视为错误值。 count
方法是统计与传入值匹配的实例数。但是,如果 myList
是查询集,则此方法有效。
您可以尝试:
{% if theList.object_list.count > 0 %}
blah, blah...
{% else %}
blah, blah....
{% endif %}
这有效:
{% if myList|length %}
Do something!
{% endif %}
为什么这里有这么多答案以及为什么有这么多困惑是这并不总是有效。我认为模板过滤器不能用于 if
语句的参数,这是后来添加的。现在也可以执行 {% if myList|length >= 3 %}
之类的操作。过滤器应该与 len(myList)
等效,因此可以处理的任何类型的对象也可以处理 |length
过滤器。
Collection.count 无括号
{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
我需要集合长度来决定是否应该呈现表 <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>
不定期副业成功案例分享
length
过滤器似乎也适用于条件块。例如{% if athlete_list|length > 1 %}...{% endif %}