Python 如何在django模板中同时检查if、elif和else条件
我在类别字段中有3个类别。我想在django模板中检查它,并为3个不同的类别分配适当的URL 我试过:Python 如何在django模板中同时检查if、elif和else条件,python,django,Python,Django,我在类别字段中有3个类别。我想在django模板中检查它,并为3个不同的类别分配适当的URL 我试过: {% for entry in entries %} {% if entry.category == 1 %} <a href="{% url 'member:person-list' %}"><li>{{ entry.category }}</li></a> {% elif entry.categ
{% 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只检查第一个匹配的if条件,但在for循环中使用elif时,它会检查每个条件,直到endfor循环。因此,我下面的回答很有效 这是我的工作答案:
{% 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 %}
输出的网页视图:
为了获得更多的澄清,我用django shell检查了我的代码。请参见my shell的片段:
即使我改变了if条件的顺序,结果仍然是一样的。请参阅我的shell代码及其输出:
你看到我的密码有什么错误吗?它完全符合python条件,并给出了预期的结果。任何人都可以在django shell上查看 据我所知,您希望根据每个条目在3个类别中所属的类别将其与url关联。您可以在条目模型中进行重构,以最小化模板中的逻辑,如:
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 %}
什么这一点也不清楚。每个entry.category一次只能匹配一个条件。你想要实现什么?非常不清楚,抱歉。但我知道python只检查第一个匹配条件,如果您期望什么?我期望所有三个类别的输出。因为三个类别是不同的,每个类别都有一个单独的列表。所以我想获得所有3个类别的名称及其链接,以获得正确的列表。此列表将从他们的URL获取。我希望你会明白对不起,丹尼尔,我已经得到了我的工作答案。我现在发布了我的答案。在否决我之前,请查看我的答案和django shell代码,并在django shell中尝试它,以检查它是否错误或是否提供了正确的输出。仍然无法理解您试图执行的操作。因此,这实际上与Python完全无关,只检查第一个匹配条件,但事实是你在比较字符串和整数,我贴了一张我的输出图片,并解释了我的答案。不管它是什么,它都为所有3个类别提供了正确的输出。在对我进行下一次投票之前,请在django shell中尝试我的django shell代码,检查它是否有效,并指出我哪里做错了。@ohid关键是您正在使用。每次迭代都会选择一个单独的分支。这并不奇怪。这可能是另一种方法。它能给我比我的答案更好的表现吗?它需要两个地方来使用逻辑:模型和模板,而我的只有一个地方,即我认为代码较少的模板。假设在您的一个视图中,您执行一些逻辑,并且需要一个条目的url重定向到,您将只执行entry.get_entry_url,而不是在需要获取条目url时在整个代码库中编写另一条if…else语句。所以这不仅仅是另一种方法,而是一种重构,减少模板中的逻辑,这是一种很好的实践