Вы используете slug:
преобразователь пути [Django-doc] :
path('<<b>slug:</b>slug>', views.CategorieView.as_view(), name='categorie_name'),
path(
'<<b>slug:</b>anythinghereworks>/<<b>slug:</b>slug>',
views.<b>Detail</b>DetailView.as_view(),
name='detail_name'
),
Преобразователь пути инкапсулирует регулярное выражениездесь указываются допустимые шаблоны (например, преобразователь пути int:
будет соответствовать только последовательности цифр), а также преобразование между подстрокой в URL-адресе и объектом.Это может быть строка, например, в случае slug
, но преобразователь пути int:
, например, нацелен на int
.
. В ваших View
s вы можете затем переопределитьget_queryset
метод:
class <b>Detail</b>DetailView(DetailView):
model = Detail
slug_field = 'slug'
template_name = "app/details.html"
def <b>get_queryset</b>(self):
return super(DetailView, self).get_queryset().filter(
category__slug=self.request.kwargs['anythinghereworks']
)
для правильной фильтрации набора запросов.Для запроса с неверным значением slug
или anythinghereworks
это повысит 404.
Также (настоятельно) желательно не назвать что-либо DetailView
, так как оно будет перезаписать ссылка в вашем модуле на новый созданный класс, и, следовательно, другие представления в файле, будут наследоваться от вашего DetailView
.
Однако я советуюискать лучшую номенклатуру, чем anythinghereworks
.Например, вы можете переименовать параметры в category_slug
и detail_slug
.Это позволит избежать путаницы и, следовательно, (потенциальных) ошибок.