Django-taggit kwargs了解

时间:2018-02-05 13:58:03

标签: python django kwargs django-taggit

我正在使用-django taggit,它运行正常。但是需要进行一些更改以扩展DetailView url并在它们之后使用404错误来缓解TagListView。所以我在get_absolute_url函数中找不到kwargs的问题,但我无法理解如何修复它。

所以,工作正常: 的 models.py

    def get_absolute_url(self):
       return reverse("posts:detail", kwargs={"slug": self.slug})

urls.py:

    url(r'^(?P<slug>[\w-]+)/$', Detail.as_view(), name='detail'),
    url(r'^tag/(?P<slug>[\w-]+)/$', TagListView.as_view(), name='tagged'),

views.py:

class TagListView(ListView):
   template_name = "posts/postlist.html"
   paginate_by = "3"

   def get_queryset(self):
      return Post.objects.filter(tags__slug=self.kwargs.get("slug")).all()

   def get_context_data(self, **kwargs):
       context = super(TagListView, self).get_context_data(**kwargs)
       context["tag"] = self.kwargs.get("slug")
       return context

当我将“category”:self.category 添加到get_absolute_url并将其粉碎时:

models.py:

def get_absolute_url(self):
       return reverse("posts:detail", kwargs={"category": self.category, "slug": self.slug})

urls.py:

    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/$', Detail.as_view(), name='detail'),
    url(r'^tag/(?P<slug>[\w-]+)/$', TagListView.as_view(), name='tagged'),

我认为get_context_data func应该有变化,但是看不清楚到底是什么。 有什么想法或意见吗?

2 个答案:

答案 0 :(得分:0)

你正在尝试访问甚至没有传递给函数的kwargs。你应该到处都有

def func(self, *args, **kwargs):

答案 1 :(得分:0)

所以我通过将网址顺序更改为:

来解决问题
    url(r'^tag/(?P<slug>[\w-]+)/$', TagListView.as_view(), name='tagged'),
    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/$', Detail.as_view(), name='detail'),

我不确定这是好方法,但它确实有效。如果你有更多的专业 - 请告诉我