Skip to content

Instantly share code, notes, and snippets.

@chrisgrande
Created March 24, 2023 17:00
Show Gist options
  • Save chrisgrande/a717a2798b2246623c4934eb513e669d to your computer and use it in GitHub Desktop.
Save chrisgrande/a717a2798b2246623c4934eb513e669d to your computer and use it in GitHub Desktop.
Django view mixin to redirect to a named view on 404
from django.http import Http404
from django.urls import reverse
from django.shortcuts import redirect
from django.views.generic.detail import SingleObjectMixin
class RedirectOn404Mixin(SingleObjectMixin):
redirect_url_name = None
def get(self, request, *args, **kwargs):
try:
return super().get(request, *args, **kwargs)
except Http404:
if self.redirect_url_name:
redirect_url = reverse(self.redirect_url_name)
return redirect(redirect_url)
else:
raise
from mixins import RedirectOn404Mixin
from django.views.generic import DetailView
class TestDetail(RedirectOn404Mixin, DetailView):
model = Test
redirect_url_name = 'test-index'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment