django模板只显示不同的值

时间:2015-06-02 04:32:17

标签: python django templates

假设我有一个查询:

cities = City.objects.all()

在我的模板中,我做了:

{% for city in cities %}
    {{city.friend_name}}
    <a href="{% url "my_url" city.friend_name.id %}" class="btn btn-primary">View Detail</a>
{% endfor %}

它给了我4个朋友的名字,他们的身份证明了亚历克斯1,亚特2,马克3,马克3.但是这里马克重复了。我只想要一次马克。如果值重复,我希望它只打印一次。

如何在模板中执行此操作。我的意思是有{{city.friend_name|distinct}}或其他东西

我不想要独特的城市。我希望城市上的朋友名字是独一无二的。

谢谢

3 个答案:

答案 0 :(得分:2)

通常最好先更改您的查询,以确保获得最少量的数据。 在这种情况下,您可以按如下方式编辑查询:

data

现在,当您遍历cities_with_uniq_friend_names = City.objects.all().distinct('friend_name') 时,它会为您提供唯一的朋友姓名

答案 1 :(得分:0)

为什么要在模板中执行此操作?尝试修改cities本身,使其具有唯一条目。 您可以将list转换为set,然后重新转换回来:

cities_unique = list(set(cities))

如果您必须显示唯一属性,请使用regroup功能

答案 2 :(得分:0)

不要使用额外的输入参数,只需使用&#34; ifchanged&#34; django内置过滤器:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#ifchanged

{% for city in cities|dictsort:'friend_name' %}
    {% ifchanged %}{{city.friend_name}}{% endifchanged %}    
    <a href="{% url "my_url" city.friend_name.id %}" class="btn btn-primary">View Detail</a>
{% endfor %}

P.S。我知道它已经3岁了,但对其他人来说这是一个有用的答案。