Как перенаправить при возникновении ошибки внутри представления на основе класса Django
У меня есть представление на основе класса (допустим, DetailView), которое отображает страницу со списком объектов на основе slug в URL. Но если объект с заданным slug не существует, он выдает ошибку. Что я хочу, так это перенаправить на главную страницу вместо того, чтобы выдавать ошибку. Это должно быть просто, но я не могу понять, как это сделать, поэтому хочу попросить помощи здесь.
Просто, я хочу найти что-то вроде "success_url", но для ошибок.
Пример:
views.py
class ShowExerciseRecords(ListView):
def get_queryset(self):
exercise = Exercise.objects.get(slug=self.kwargs['slug'])
return exercise.record__set.all()
urls.py
urlpatterns = [
path('/exercise/<slug:slug>/', ShowExerciseRecords.as_view())
path('', index, name='home')
]
попробуйте этот код,
class ShowExerciseRecords(ListView):
def get_queryset(self):
records = Record.objects.none() # you should replace the exact model name
exercise = Exercise.objects.filter(slug=self.kwargs['slug']).first()
if exercise:
records = exercise.record__set.all()
return records
def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
if self.object_list:
context = self.get_context_data()
return self.render_to_response(context)
return redirect("main-page-url") # you should change the url to your case
вы можете использовать try, за исключением, например:
try:
Exercise.objects.get(slug=self.kwargs['slug'])
except Exercise.DoesNotExist:
redirect("main-page-url")