Django-taggit kwargs понимание

Я использую django taggit, и он отлично работает. Но необходимо внести некоторые изменения, чтобы расширить URL-адрес DetailView, и после них TagListView отключился с ошибкой 404. Итак, я понимаю эту проблему с kwargs в функции get_absolute_url, но не могу понять, как это исправить.

Итак, работайте нормально: 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 и 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, но не могу понять, что именно. Любые идеи или советы, пожалуйста?


person Ilya    schedule 05.02.2018    source источник


Ответы (2)


Вы пытаетесь получить доступ к kwargs, которые даже не переданы в функцию. Вы должны везде иметь

def func(self, *args, **kwargs):
person unixia    schedule 05.02.2018
comment
спасибо, но он все еще возвращает ошибку 404. может быть проблема с URL-адресами, я не знаю .. - person Ilya; 06.02.2018

Поэтому я решаю проблему, изменив порядок URL-адресов на:

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

Я не уверен, что это хороший способ, но он работает. Если у вас есть еще предложения - сообщите мне

person Ilya    schedule 06.02.2018