Ограничьте slug пути django списком
В настоящее время у меня есть такой путь
path('<slug:slug>/', ToSlugPage.as_view()),
Есть ли способ ограничить результаты, которые slug может иметь для этого пути, и если да, то как?
Так, например, если у меня есть список слизней
slugs = ['page1', 'page2', 'page3']
Можно ли как-то сделать так, чтобы slug проверял это, если нет, то продолжал идти по другим путям/возвращал 404?
Вы можете использовать Path converters для настройки параметров url. В этом документе говорится:
Метод to_python(self, value), который обрабатывает преобразование найденной строки в тип, который должен быть передан функции представления. Он должен вызывать ValueError, если не может преобразовать заданное значение. Ошибка ValueError интерпретируется как отсутствие соответствия, и, как следствие, пользователю отправляется ответ 404, если только не подходит другой шаблон URL.
.
например: in converts.py
class CustomUrlParameterType:
valid_pages = ['page1', 'page2', 'page3']
def to_python(self, value):
if value not in self.valid_pages:
raise ValueError
return value
def to_url(self, value):
return value
в urls.py
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.CustomUrlParameterType, 'custom_type')
urlpatterns = [
...
path('<custom_type:slug>/', ToSlugPage.as_view()),
...
]
Кроме того, вы можете получить свои параметры из url как параметры запроса.