Django模板标签搜索for循环查找具有默认值的特定对象(如果未找到)

时间:2016-07-22 23:59:30

标签: python html django django-templates

我将一个人的查询集传递给我的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”条件。

2 个答案:

答案 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 %}