← Back to Chapters

Understanding HttpResponse, render(), and redirect()

? Understanding HttpResponse, render(), and redirect()

? Quick Overview

Django views must return an HTTP response. HttpResponse, render(), and redirect() are the three most commonly used response utilities to send content, HTML pages, or navigation instructions back to the client.

? Key Concepts

  • Every Django view returns an HTTP response
  • Responses can be static, dynamic, or navigational
  • Django provides shortcuts for common response patterns

? Syntax & Theory

? HttpResponse

Used to return plain content such as text or HTML directly.

? View Code Example
# Import HttpResponse class
from django.http import HttpResponse
def my_view(request):
    return HttpResponse("Hello, World!")

? Returning HTML

? View Code Example
# Returning raw HTML content
from django.http import HttpResponse
def html_view(request):
    return HttpResponse("<h1>Welcome to My Website</h1>")

? render()

Combines template and context data to generate dynamic HTML.

? View Code Example
# Rendering template with context
from django.shortcuts import render
def my_view(request):
    context = {'greeting': 'Hello, World!'}
    return render(request, 'template.html', context)

? redirect()

Sends the user to another URL.

? View Code Example
# Redirecting to named URL
from django.shortcuts import redirect
def redirect_view(request):
    return redirect('home')

? Interactive Example

Change view behavior by switching between HttpResponse, render, and redirect in a Django app and observe browser behavior.

Simulate Response Type:

URL: /my-view/
Click a button above to see how the browser reacts...

? Use Cases

  • APIs and test responses → HttpResponse
  • Web pages with templates → render()
  • Login success / logout → redirect()

✅ Tips & Best Practices

  • Prefer render() for HTML pages
  • Use redirects after POST requests
  • Keep HttpResponse for simple outputs

? Try It Yourself

  • Create three views using each response type
  • Observe URL changes on redirect
  • Pass dynamic data using render()