【问题标题】:django template show only distinct valuedjango模板只显示不同的值
【发布时间】:2015-06-02 04:32:16
【问题描述】:

假设我有一个查询:

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 个 ID 为 alex 1、matt 2、mack 3、mack 3 的朋友的名字。但这里 mack 重复了。我只想要麦克一次。如果这些值重复,我希望它只打印一次。

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

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

谢谢

【问题讨论】:

    标签: python django templates


    【解决方案1】:

    不要使用额外的输入参数,只需使用“ifchanged”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 %}
    

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

    【讨论】:

    • 我是别人,我发现这个答案很有帮助!
    【解决方案2】:

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

    cities_with_uniq_friend_names = City.objects.all().distinct('friend_name')
    

    现在,当您遍历 cities_with_uniq_friend_names 时,它会为您提供唯一的朋友名称

    【讨论】:

    • 这是正确的做法——不要在模板中应用业务逻辑
    • 但它只支持 Postgres 我正在使用 mysql
    【解决方案3】:

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

    cities_unique = list(set(cities))

    如果您必须显示独特的属性,请使用regroup 功能

    【讨论】:

    • 请不要编辑问题以提出新问题。至于答案,请查看编辑
    猜你喜欢
    • 2014-08-12
    • 2016-10-03
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多