In this tutorial, you will learn how to redirect a user from one page to another.

Redirect using the hardcoded path in Django

# views.py

from django.shortcuts import HttpResponse
from django.shortcuts import redirect, reverse



def redirect_view1(request):
    q = request.GET.get('q')
    if q is not None:
        # Redirect the user
        return redirect('/url/') # /url/ is your URL path
    else:
        return HttpResponse("<h1>Page 1</h1>")

Redirect using named URL's in Django

It is a two-step process - naming the URL and using this URL in the redirect(). To convert this URL name to a URL path we need to import a reverse function from django.shortcuts and pass this URL name as a parameter.

# urls.py

from django.urls import path

from . import views

app_name = "practice"

urlpatterns = [
    path('url1/', views.redirect_view1),
    path('url5/', views.redirect_view2, name="page2")
]
#views.py

from django.shortcuts import HttpResponse
from django.shortcuts import redirect, reverse



def redirect_view1(request):
    q = request.GET.get('q')
    if q is not None:
        # Redirect the user
        return redirect(reverse('page2')) # page2 is the name of the URL
        # If you are using namespace URLs then you can write reverse('namespace_name:page2')
    else:
        return HttpResponse("<h1>Page 1</h1>")

Temporary Redirect in Django

A status code 302 Found indicates a temporary redirect.

from django.shortcuts import HttpResponse
from django.shortcuts import redirect, reverse



def redirect_view1(request):
    q = request.GET.get('q')
    if q is not None:
        # Redirect the user
        response = HttpResponse(status=302) #use status = 302 for temporary redirects
        response['Location'] = reverse('page6') # page6 is the name of the url
        return response
    else:
        return HttpResponse("<h1>Page 1</h1>")

Permanent Redirect in Django

A status code 301 indicates a permanent redirect.

from django.shortcuts import HttpResponse
from django.shortcuts import redirect, reverse



def redirect_view1(request):
    q = request.GET.get('q')
    if q is not None:
        # Redirect the user
        response = HttpResponse(status=301) #use status = 301 for permanent redirects
        response['Location'] = reverse('page6') # page6 is the name of the url
        return response
    else:
        return HttpResponse("<h1>Page 1</h1>")