Django-模板循环但排除重复

时间:2018-01-12 03:09:54

标签: python django templates

说我有这些数据,然后传递给我的模板:

apps = [
 {'category': 'one', 'item': 'blah'},
 {'category': 'one', 'item': 'blah'},
 {'category': 'two', 'item': 'blah'},
 {'category': 'two', 'item': 'blah'},
 {'category': 'three', 'item': 'blah'}
]

然后在我的模板中,我想添加一个带有id'类别的div。但如果之前已添加id,则不重复任何div。所以类似于:

{% for app in apps %}
   <div id="{{app.category}}"></div>
{% endfor %}

但我只想要渲染这些:

<div id="one"></div>
<div id="two"></div>
<div id="three"></div>

1 个答案:

答案 0 :(得分:2)

我认为您应该在将应用列表传递给模板之前删除重复项。

有很多方法可以做到这一点,我将举一个简单的例子。

apps = [dict(t) for t in set([tuple(d.items()) for d in apps])]

更新

如果您想在{'items': 'blah'}中添加apps,我建议您在制作新应用之前使用该键,值对。

您可以像这样使用简单的del函数和for循环

for d in apps:
    del d['item']

然后您的apps列表就像这样

[{'category': 'one'},
 {'category': 'one'},
 {'category': 'two'},
 {'category': 'two'},
 {'category': 'three'}]

然后你可以再次使用我的答案。

  

如果您熟悉lambda,可以像这样使用lambda函数

map(lambda d: d.pop('item'), apps)

您将获得与上述相同的apps