如何在django模板中同时检查是否,elif,else条件

时间:2016-08-31 10:39:32

标签: python django

我在类别字段中有3个类别。我想在django模板中检查它并为3个不同的类别指定appropirte url。

我试过了:

{% for entry in entries %}
        {% if entry.category == 1 %}
        <a href="{% url 'member:person-list' %}"><li>{{ entry.category }}</li></a>
        {% elif entry.category == 2 %}          
        <a href="{% url 'member:execomember-list' %}"><li>{{ entry.category}}</li></a>
         {% else %}
         <a href="{% url 'member:lifemember-list' %}"><li>{{ entry.category}}</li></a>
        {% endif %}
{% empty %}
    <li>No recent entries</li>
{% endfor %}

但我知道python只用if检查第一个匹配条件。因此它只给出了一个期望的结果。如何使用正确的链接获取所有三个条目?

修改

虽然python只检查第一个匹配条件,当在for循环中使用elif时,检查每个条件直到endfor循环。因此我的答案下面的答案很好。

2 个答案:

答案 0 :(得分:1)

这是我的工作答案:

   {% for entry in entries %}
        {% if entry.category == 'General Member' %}
        <a href="{% url 'member:person-list' %}"><li>{{ entry.category }}</li></a>
    {% elif entry.category == 'Executive Committee Member' %}
        <a href="{% url 'member:execomember-list' %}"><li>{{ entry.category}}</li></a>
    {% else %}
    <a href="{% url 'member:person-list' %}"><li>{{ entry.category}}</li></a>
        {% endif %}
    {% empty %}
        <li>No recent entries</li>
  {% endfor %}

输出的网页视图:

enter image description here

有关更多说明,我使用django shell检查我的代码。看到我的shell的片段:

enter image description here

即使我改变if条件的顺序,结果仍保持不变。请参阅我的shell代码并输出:

enter image description here

你觉得我的代码有问题吗?它完全符合python条件并给出预期的结果。任何人都可以在他们的django shell上查看它。

答案 1 :(得分:1)

根据我的理解,您希望将每个条目与网址相关联,具体取决于它在3个类别中所属的类别。您可以在Entry模型中对此进行重构,以最大限度地减少模板中的逻辑,如:

class Entry(models.Model):
    category = ...

    def get_entry_url(self):
        if self.category == 'General Member':
            return reverse for the url 'member:person-list'

        elif self.category == 'Executive Committee Member':
            return reverse for the url 'member:execomember-list'

        else:
            return reverse for the url 'member:person-list'

然后在模板中:

{% for entry in entries %}
     <a href="{{ entry.get_entry_url }}"><li>{{ entry.category }}</li></a>
{% empty %}
    <li>No recent entries</li>
{% endfor %}