11

如何从 django-taggit 获取所有(唯一)标签?我想在侧边栏中显示所有标签。目前我能够获取特定帖子的所有标签,但现在我需要获取整个博客中的所有唯一标签。

models.py 中的代码:

from django.db import models
from taggit.managers import TaggableManager

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField()
    tags = TaggableManager()
4

3 回答 3

25

您可以使用all()获取数据库中的所有标签:

from taggit.models import Tag
tags = Tag.objects.all()

如果您需要完整的解决方案,请查看django-taggit-templatetags. 它提供了几个templatetags,包括一个用于标签列表,以将各种 taggit API 直接暴露给模板。

于 2012-10-15T11:03:02.510 回答
5

当前维护的支持较新版本 django 的 fork 是: https ://github.com/fizista/django-taggit-templatetags2

django-taggit-templatetags 已经好几年没有维护了。

于 2014-09-12T16:16:52.403 回答
2

我知道这是一个老问题……但我是 Django 新手,在寻找用所有标签选项填充 Ajax 下拉列表的方法时发现了这个问题。我想出了一种方法,djangorestframework并想在这里为其他人提供一个更完整的解决方案(OP 也可以用响应填充侧边栏,或者用它做任何其他事情)。

这会添加一个 api 端点tag,因此您不仅可以通过导航查看它们,还可以/tag/获取适合 Ajax 的 JSON 响应(ergo,假设您已djangorestframework安装并正在使用)。

序列化程序.py

from taggit.models import Tag
class MyTagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ['name', 'slug']

视图.py

from taggit.models import Tag
class TagViewSet(viewsets.ModelViewSet):
    """
    Not using taggit_serializer.serializers.TaggitSerializer because that's for listing
    tags for an instance of a model
    """
    queryset = Tag.objects.all().order_by('name')
    serializer_class = MyTagSerializer

网址.py

router.register(r'tag', TagViewSet)

而且,如果你需要 ajax:

$(document).ready(function(){

   $.ajax({
      url : "/tag/",
      dataType: "json",
      type: 'GET'
    }).done(function(response){
      for (var i in response) {
        tagEntry = response[i];
        $('#tagdropdown').append($('<option>', {
            value: tagEntry.name,
            text: tagEntry.name
        }));
      }
    }).fail(function(response){
      console.log('failed!');
      console.log(response);
    });

});
于 2020-05-16T01:17:36.107 回答