我将一个人的查询集传递给我的django模板,其中一些已被分配了“座位”而另一些则没有。座位可以分配给任何人,因此保持空白。对于每个席位,我希望模板循环查询集,寻找该席位中的某个人。如果for循环找不到该座位的任何人,我希望它们呈现一个空座位。这就是我的想法:
{% for person in people %}
{% if person.seat_num = 1 %}
<div class="filled_seat"></div>
{% endif %}
{% empty %}
<div class="empty_seat"></div>
{% endfor %}
除非我意识到{%empty%}仅在迭代的集合为空时触发,而如果未找到座位则需要默认值(在集合中没有任何内容存在“if”条件。
答案 0 :(得分:0)
是的,因为for...empty就是这样的。它基本上无法知道您的座位是否为空,因此您需要实现自己的逻辑。
我不知道你模特的细节,但是从你的例子中猜测你需要做这样的事情:
{% for person in people %}
{% if person.seat_num = 0 %}
<div class="empty_seat"></div>
{% else %}
<div class="filled_seat"></div>
{% endif %}
{% endfor %}
答案 1 :(得分:0)
约翰戈登的评论让我意识到我不应该试图在模板本身做太多。在视图中,我创建了一个名为“席位”的列表并填充了相应的席位,然后将其传递给模板:
seats = []
for n in range(4):
try:
seats.append(students.objects.get(seat_num=n+1))
except:
seats.append(None)
然后我使用for循环逐个循环通过座位并检查该座位是否已填满,然后生成相应的div:
{% for seat in seats %}
<td>
{% if seat %}
<div class="filled_seat"></div>
{% else %}
<div class="empty_seat"></div>
{% endif %}
</td>
{% endfor %}