Недавно Я изменил пути постов в блоге, чтобы дать более разборчивые URL.
До У меня есть эти пути:
path("category/<slug:slug_category>/", views.singleCategory_postList, name="single_category"),
path("<slug:slug_post>/", views.singlePost, name='single_blog_post'),
Теперь У меня есть это:
path("<slug:slug_category>/", views.singleCategory_postList, name="single_category"),
path("<slug:slug_category>/<slug:slug_post>/", views.singlePost, name='single_blog_post'),
Раньше get_absolute_url было так:
class Category(models.Model):
.....
def get_absolute_url(self):
return reverse("single_category", kwargs={"slug_category": self.slug_category})
class BlogPost(ModelPost, TimeManager):
.....
def get_absolute_url(self):
return reverse("single_blog_post", kwargs={"slug_post": self.slug_post})
Сейчас это:
class Category(models.Model):
.....
def get_absolute_url(self):
return reverse("single_category", kwargs={"slug_category": self.slug_category})
class BlogPost(ModelPost, TimeManager):
.....
def get_absolute_url(self):
return reverse("single_blog_post", kwargs={
"slug_post": self.slug_post,
"slug_category": self.category.slug_category,
})
Я пытаюсь использовать RedirectView для перенаправления всех старых путей;затем в urls.py У меня есть это сейчас:
path("category/<slug:slug_category>/", RedirectView.as_view(pattern_name='single_category', permanent=True)),
path("<slug:slug_post>/", RedirectView.as_view(pattern_name='single_blog_post', permanent=True)),
path("categorie/", views.categoryList, name="list_category"),
path("<slug:slug_category>/", views.singleCategory_postList, name="single_category"),
path("", views.postList, name='list_post'),
path("<slug:slug_category>/<slug:slug_post>/", views.singlePost, name='single_blog_post'),
Когда я использую эти RedirectView, мне показана эта ошибка:
NoReverseMatch в / blog/ gis /
Реверс для 'single_blog_post' с аргументами ключевого слова '{' slug_post ':' gis '}' не найден.Попробован 1 шаблон (ов): ['blog \ / (? P [-a-zA-Z0-9 _] +) \ / (? P [-a-zA-Z0-9 _] +) \ / $']
Если я комментирую два пути RedirectView, ошибка исчезает, и я могу без проблем использовать сайт, но когда я использую старые пути, я вижу ошибку 404.
Я не понялкак работает RedirectView.Кто-нибудь может дать мне пример?