Django URL Redirect

django, django-urls, python

Solution

You can try the Class Based View called `RedirectView`

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
)

Notice how as `url` in the `<url_to_home_view>` you need to actually specify the url.

`permanent=False` will return HTTP 302, while `permanent=True` will return HTTP 301.

Alternatively you can use `django.shortcuts.redirect`

Update for Django 2+ versions

With Django 2+, `url()` is deprecated and replaced by `re_path()`. Usage is exactly the same as `url()` with regular expressions. For replacements without the need of regular expression, use `path()`.

from django.urls import re_path

re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')

Problem

How can I redirect traffic that doesn't match any of my other URLs back to the home page? urls.py: ``` urlpatterns = patterns('', url(r'^$', 'macmonster.views.home'), #url(r'^macmon_home$', 'macmonster.views.home'), url(r'^macmon_output/$', 'macmonster.views.output'), url(r'^macmon_about/$', 'macmonster.views.about'), url(r'^.*$', 'macmonster.views.home'), ) ``` As it stands, the last entry sends all "other" traffic to the home page but I want to redirect via either an HTTP 301 or 302.

Original source

Related problems