Nitin Raturi
Nitin Raturi's Software Engineering Blog

Follow

Nitin Raturi's Software Engineering Blog

Follow
How to redirect to another page in django

Photo by James Balensiefen on Unsplash

How to redirect to another page in django

Nitin Raturi's photo
Nitin Raturi
·Dec 13, 2020·

2 min read

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>")

Join the python and django newsletter for more such content.

Did you find this article valuable?

Support Nitin Raturi by becoming a sponsor. Any amount is appreciated!

Learn more about Hashnode Sponsors
 
Share this