【问题标题】:How to add multiple tags to URL in Django and Taggit如何在 Django 和 Taggit 中向 URL 添加多个标签
【发布时间】:2022-04-09 00:42:56
【问题描述】:

我在这里有这个模型,我使用 TaggableManager 传递标签。

class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    date_published = models.DateField(auto_now_add=True)
    tags = TaggableManager()
    slug = models.SlugField(max_length=40, blank=True)

这就是我查看数据的方式:

class TagView(ListView):
    model = Post
    template_name = 'tagview.html'
    paginate_by = 10

    def get_queryset(self):
        return get_list_or_404(Post, tags__slug = self.kwargs.get('tag'))

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tag'] = self.kwargs.get('tag')
        return context

这按 1 个标签工作,但我想包含多个标签,我搜索了很多,但想不出如何实现它。这是我的 urls.py - path('tag/<slug:tag>/', views.TagView.as_view(), name='tagview'),

我想要/tags/[django][python]/ 之类的东西。

【问题讨论】:

  • 你知道怎么做吗?

标签: python django django-taggit


【解决方案1】:

另一种方法女巫将完成相同的最终结果将是 使用 query_params 这意味着您将打开 url 以接收任何参数,女巫将遵循基本 url 到此路径,并且您将检查 query_params 是否具有我们正在寻找的 'tag' 键。

URL 请求如下所示:

http://127.0.0.1:8000/blog?tag=python&tag=django

#urls.py

path('', views.TagView.as_view(), name='tagview'),

#views.py

class TagView()
    def get(self, request):
        posts = Post.objects.all()
        is_there_a_tag = request.query_params.get('tag')
        if is_there_a_tag is not None:

           tag_list = request.query_params.getlist('tag')
        matches = self.posts.filter(tags__name__in=tag_list).distinct()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多