Короткий ответ : сделать непересекающимися шаблонами.
Два определенных вами шаблона полностью перекрываются. Действительно, если у вас есть URL с /some-category-slug
, то этот URL будет соответствовать шаблону <slug:detail_slug>/
и, таким образом, будет запускать первое представление. Тот факт, что другой path
также совпадает, не имеет значения, поскольку Django всегда будет запускать первое представление в списке, который соответствует.
Лучший способ решить эту проблему - сделать непересекающимся шаблоны, например:
path('<b>detail/</b><slug:detail_slug>/', DetailView.as_view(), name='detail'),
path('<b>category/</b><slug:cat_slug>/', CategoryView.as_view(), name='category'),
Если вы сейчас создадите URL для категории, он будет выглядеть как category/my-category-slug
. Это может не совпадать с первым path(..)
, поскольку для этого требуется, чтобы путь начинался с detail
. Также верно и обратное.
Обратите внимание, что вы забыли правильно установить model
вашего CategoryView
, вероятно, оно должно быть:
class CategoryView(generic.DetailView):
model = <b>Category</b> # change to Category
template_name = 'JobPanel/category.html'
slug_url_kwarg = 'cat_slug'
slug_field = 'slug'