我在类别字段中有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循环。因此我的答案下面的答案很好。
答案 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 %}
输出的网页视图:
有关更多说明,我使用django shell检查我的代码。看到我的shell的片段:
即使我改变if条件的顺序,结果仍保持不变。请参阅我的shell代码并输出:
你觉得我的代码有问题吗?它完全符合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 %}