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

MrD*_*ase 127 django django-templates

我的Django模板中有一个列表.我想只在列表大小大于零时才做某事.我怎么检查这个?

我试过myList | length和myList | length_is但是没有成功.我到处搜索过,没看到任何例子.

Ale*_*lli 243

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

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 长度过滤器似乎也可以在条件块中工作。例如`{{如果田径运动员名单的长度|%> 1%} ... {%endif%}` (3认同)

Dav*_*ith 90

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

{% for athlete in athlete_list %}
  ...
{% empty %}
  No athletes
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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


mip*_*adi 20

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

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)


Nil*_*are 12

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

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

Tim*_*all 8

这有效:

{% if myList|length %}
    Do something!
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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


小智 7

您可以尝试:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 
Run Code Online (Sandbox Code Playgroud)