简体   繁体   English

Django-taggit kwargs的理解

[英]Django-taggit kwargs understanding

I'm using-django taggit and it works fine. 我正在使用-django taggit,它工作正常。 But there are need to make some changes to extend DetailView url and after them TagListView chushed with 404 error. 但是需要进行一些更改以扩展DetailView url,之后TagListView会出现404错误。 So i'm undestand that problem with kwargs in get_absolute_url function, but i can't understand how to fix it. 所以我无法理解get_absolute_url函数中的kwargs问题,但是我不知道如何解决它。

So, work fine: models.py 因此,可以正常工作: models.py

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

urls.py: 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: 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

And when I add "category": self.category to get_absolute_url and urls it crush: 当我在get_absolute_url中添加“ category”:self.category并压入它的网址时:

models.py: models.py:

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

urls.py: 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'),

I suppose that there shoulb be changes in get_context_data func, but can't see what exactly. 我想应该在get_context_data函数中进行更改,但无法确切看到。 Any ideas or advices please? 有什么想法或建议吗?

You're trying to access kwargs which are not even passed to the function. 您正在尝试访问尚未传递给函数的kwarg。 You should everywhere have 你应该到处都有

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

So I resolve problem by changing urls order to: 因此,我通过将网址顺序更改为来解决问题:

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

I'm not sure that it good way, but it works. 我不知道这是个好方法,但是可以。 If you have any more prososals - please give me know 如果您还有其他建议-请告诉我

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM