我有一个 django 应用程序,正在django-taggit
用于我的博客。
现在,我有一个从数据库中获得的元素列表(实际上是对象),如下所示
tags = [<Tag: some>, <Tag: here>, <Tag: tags>, <Tag: some>, <Tag: created>, <Tag: here>, <Tag: tags>]
现在如何查找列表中每个元素的计数并返回元组列表,如下所示
结果应该如下
[(<Tag: some>,2),(<Tag: here>,2),(<Tag: created>,1),(<Tag: tags>,2)]
这样我就可以通过在模板中循环使用它们,如下所示
看法
def display_list_of_tags(request):
tags = [<Tag: some>, <Tag: here>, <Tag: tags>, <Tag: some>, <Tag: created>, <Tag: here>, <Tag: tags>]
# After doing some operation on above list as indicated above
tags_with_count = [(<Tag: some>,2),(<Tag: here>,2),(<Tag: created>,1),(<Tag: tags>,2)]
return HttpResponse('some_template.html',dict(tags_with_count:tags_with_count))
模板
{% for tag_obj in tags_with_count %}
<a href="{% url 'tag_detail' tag_obj %}">{{tag_obj}}</a> <span>count:{{tags_with_count[tag_obj]}}</span>
{% endfor %}
所以如上所述如何计算列表中每个元素的出现次数?这个过程最终应该很快,因为我在标签应用程序中可能有数百个标签,对吧?
如果列表只包含字符串作为元素,我们可以使用类似的东西from collections import counter
并计算计数,但在上述情况下怎么办?
我的所有意图是计算出现次数并将它们打印在模板中,例如tag object and occurrences
,
所以我正在寻找一种快速有效的方法来执行上述功能?
编辑:
所以我得到了所需的答案,我通过将结果转换list of tuples
为字典将结果发送到模板,如下所示
{<Tag: created>: 1, <Tag: some>: 2, <Tag: here>: 2, <Tag: tags>: 2}
并尝试通过以如下格式循环打印上述字典
{% for tag_obj in tags_with_count %}
<a href="{% url 'tag_detail' tag_obj %}">{{tag_obj}}</a> <span>count:{{tags_with_count[tag_obj]}}</span>
{% endfor %}
但它显示以下错误
TemplateSyntaxError: Could not parse the remainder: '[tag_obj]' from 'tags_with_count[tag_obj]'
那么如何通过like key和value在django模板中显示字典呢?
完成后我们可以改变上面的模板循环如下
{% for tag_obj, count in tags_with_count.iteritems %}