基于 django taggit(package) 中的标签的 Post filter



我刚刚按照官方文档安装了 django taggit。一切都很好,但是当我单击标签时,它不会过滤包含该标签的帖子,这是我的代码。 包含 models.py 文件的代码

..............
from taggit.managers import TaggableManager
..................
class Post(models.Model):
STATUS_CHOICES = ((DRAFT, _('draft')),
(PUBLISHED, _('published')))
author = models.ForeignKey(get_user_model(), verbose_name=_(
"Author"), on_delete=models.CASCADE, related_name='blog_posts')
title = models.CharField(_("Title"), max_length=200, unique=True)
slug = models.SlugField(_("Slug"), unique_for_date='publish')
status = models.IntegerField(
_('status'), db_index=True,
choices=STATUS_CHOICES, default=DRAFT)
tags = TaggableManager()

def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("blog:post_detail", kwargs={
"pk": self.pk
})

代码包含 views.py 文件

from django.views.generic import ListView
class PostListView(ListView):
model = Post
queryset = Post.published.all().order_by('-publish')
context_object_name = 'post_list'
template_name = "client/pages/blog_list.html"
paginate_by = 7

urls.py 文件

from .views import PostListView,
..........
path('tag/<slug:tag_slug>/', PostListView.as_view(), name='post_list_by_tag'),
..........

并在模板文件中

<ul class="tags-inline">
<li>Tags:</li>
{% for tag in post_detail.tags.all %}
<li>
<a href="{% url 'blog:post_list_by_tag' tag.slug %}">{{ tag.name }}</a>
,
</li>
{% endfor %}
</ul>

您需要更改查询集以基于标记进行筛选。 这是基于all()恢复一切

queryset = Post.published.all().order_by('-publish')

我不确定您如何过滤 Taggit

最新更新