The redirects app

Django comes with an optional redirects application. It lets you store simpleredirects in a database and handles the redirecting for you. It uses the HTTPresponse status code 301 Moved Permanently by default.

Installation

To install the redirects app, follow these steps:

How it works

manage.py migrate creates a django_redirect table in your database. Thisis a simple lookup table with site_id, old_path and new_path fields.

The RedirectFallbackMiddlewaredoes all of the work. Each time any Django application raises a 404error, this middleware checks the redirects database for the requestedURL as a last resort. Specifically, it checks for a redirect with thegiven old_path with a site ID that corresponds to theSITE_ID setting.

  • If it finds a match, and new_path is not empty, it redirects tonew_path using a 301 ("Moved Permanently") redirect. You can subclassRedirectFallbackMiddlewareand setresponse_redirect_classto django.http.HttpResponseRedirect to use a302 Moved Temporarily redirect instead.
  • If it finds a match, and new_path is empty, it sends a 410 ("Gone")HTTP header and empty (content-less) response.
  • If it doesn't find a match, the request continues to be processed asusual.
    The middleware only gets activated for 404s — not for 500s or responses of anyother status code.

Note that the order of MIDDLEWARE matters. Generally, you can putRedirectFallbackMiddleware at theend of the list, because it's a last resort.

For more on middleware, read the middleware docs.

How to add, change and delete redirects

Via the admin interface

If you've activated the automatic Django admin interface, you should see a"Redirects" section on the admin index page. Edit redirects as you edit anyother object in the system.

Via the Python API

Middleware

  • class middleware.RedirectFallbackMiddleware
  • You can change the HttpResponse classes usedby the middleware by creating a subclass ofRedirectFallbackMiddlewareand overriding response_gone_class and/or response_redirect_class.

    • response_gone_class
    • The HttpResponse class used when aRedirect is not found for therequested path or has a blank new_path value.

Defaults to HttpResponseGone.

  • response_redirect_class
  • The HttpResponse class that handles the redirect.

Defaults to HttpResponsePermanentRedirect.