我创建了一个Tag模型,它是Blog模型的外键。但我无法在html模板中呈现标签。
这是标签模型
class Tag(models.Model):
name = models.CharField(max_length=40)
class Meta:
verbose_name = "tag"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
以下是博客模型
class Blog(models.Model):
title = models.CharField(max_length=100, verbose_name='titel')
tag = models.ManyToManyField(Tag, blank=True, verbose_name='tag')
class Meta:
verbose_name = "Blog"
verbose_name_plural = verbose_name
def __str__(self):
return self.title
在我的Views.py
中class BlogDetailView(View):
def get(self, request, news_pk):
blog = Blog.objects.get(id=int(news_pk))
title = news.title
tags = blog.tag
return render(request, 'news_detail.html',
{
'title': title,
'tags': tags
})
在详细的html中: 我尝试了两种渲染标记的方法,都失败了。
1
{% for tag in tags %}
<span>{{ tag.name }}</span>
{% endfor %}
这种方式没有任何结果。
2
<span>{{ tags.values }}</span>
它有很多像这样的东西
<QuerySet [{'id': 4, 'name': 'eatting'}, {'id': 5, 'name': 'drinking'}, {'id': 7, 'name': 'playing'}]>
{{tags.values_list}}
就像
一样 <QuerySet [(4, 'eating'), (5, 'drinking'), (7, 'playing')]>
任何朋友都可以告诉我用html呈现博客标签的正确方法吗?非常感谢!
答案 0 :(得分:0)
在views.py中,我使用了注释
class BlogDetailView(View):
def get(self, request, news_pk):
blog = Blog.objects.get(id=int(news_pk))
title = news.title
tags = blog.tag.annotate(blog_count=Count('blog'))
return render(request, 'news_detail.html',
{
'title': title,
'tags': tags
})
然后在模板中:
{% for tag in tags %}
<span>{{ tag.name }}</span>
{% endfor %}