Django-Taggit: 如何打印使用最多的标签?
我其实在我的Django应用中使用了Django-Tagging。我想知道有没有什么方法可以打印出最常用的标签。我试过Django-Taggit-Templatetags,但是它不管用……(这是我关于这个问题的未解答提问)。有人能帮我吗?
2 个回答
1
我的解决方案可能有点不太正规,但它有效。你可以试试:
from collections import defaultdict, Counter
from taggit.models import Tag
from .models import YourModel
tag_frequency = defaultdict(int)
for item in YourModel.objects.all():
for tag in item.tags.all():
tag_frequency[tag.name] += 1
Counter(tag_frequency).most_common()
在基于类的视图中,这可能看起来像这样:
from collections import defaultdict, Counter
from taggit.models import Tag
from .models import YourModel
class YourView(ListView):
model = YourModel
context_object_name = "choose_a_name_you_like"
template_name = "yourmodel/yourmodel_list.html"
def get_context_data(self):
context = super(YourView, self).get_context_data() # assigns the original context to a dictionary call context
tag_frequency = defaultdict(int)
for item in YourModel.objects.all():
for tag in item.tags.all():
tag_frequency[tag.name] += 1
context['tag_frequency'] = Counter(tag_frequency).most_common() # adds a new item with the key 'tag_frequency' to the context dictionary, which you can then access in your template
return context
5
Django 1.10,Python 3.5,django-taggit 0.21.3
YourModel.tags.most_common()
还有前10个标签:
YourModel.tags.most_common()[:10]