[Django]-Redirect to named url pattern directly from urls.py in django?

221๐Ÿ‘

โœ…

If you are on Django 1.4 or 1.5, you can do this:

from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
    ...

If you are on Django 1.6 or above, you can do this:

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
    ...

In Django 1.9, the default value of permanent has changed from True to False. Because of this, if you donโ€™t specify the permanent keyword argument, you may see this warning:

RemovedInDjango19Warning: Default value of โ€˜RedirectView.permanentโ€™ will change from True to False in Django 1.9. Set an explicit value to silence this warning.

๐Ÿ‘คthnee

41๐Ÿ‘

This works for me.

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url='/')),
    ...

In above example '/' means it will redirect to index page,
where you can add any url patterns also.

๐Ÿ‘คJay Modi

33๐Ÿ‘

for django v2+

from django.contrib import admin
from django.shortcuts import redirect
from django.urls import path, include


urlpatterns = [
    # this example uses named URL 'hola-home' from app named hola
    # for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
    path('', lambda request: redirect('hola/', permanent=False)),
    path('hola/', include("hola.urls")),
    path('admin/', admin.site.urls),
]
๐Ÿ‘คGlushiator

11๐Ÿ‘

I was trying to redirect all 404s to the home page and the following worked great:

from django.views.generic import RedirectView
# under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),
๐Ÿ‘คAnurag

9๐Ÿ‘

This way is supported in older versions of django if you cannot support RedirectView

In view.py

def url_redirect(request):
    return HttpResponseRedirect("/new_url/")

In the url.py

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),

You can make it permanent by using HttpResponsePermanentRedirect

๐Ÿ‘คsirFunkenstine

1๐Ÿ‘

You could do straight on the urls.py just doing something like:

url(r'^story/(?P<pk>\d+)/',
        lambda request, pk: HttpResponsePermanentRedirect('/new_story/{pk}'.format(pk=pk)))

Just ensure that you have the new URL ready to receive the redirect!!
Also, pay attention to the kind of redirect, in the example Iโ€™m using Permanent Redirect

Leave a comment