如何在Django中的html中呈现多个到多个标签

时间:2018-04-19 15:45:53

标签: python django django-models django-templates django-views

我创建了一个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'}]>
  1. {{tags.values_list}}

  2. 就像

    一样
     <QuerySet [(4, 'eating'), (5, 'drinking'), (7, 'playing')]>
    

    任何朋友都可以告诉我用html呈现博客标签的正确方法吗?非常感谢!

1 个答案:

答案 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 %}