Return a 404 response in Django

To return a 404 response in Django, you can use the Http404 exception or the get_object_or_404() utility function, which are both simple and efficient ways to handle cases where a resource is not found. Here’s how you can use each method:

1. Using Http404 Exception

You can raise the Http404 exception in your views when a certain condition is not met (e.g., when an object does not exist in the database). Here’s an example:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from django.http import Http404
def my_view(request, id):
try:
item = MyModel.objects.get(pk=id)
except MyModel.DoesNotExist:
raise Http404("Item does not exist")
# Proceed with the rest of the view
return render(request, 'template.html', {'item': item})
from django.http import Http404 def my_view(request, id): try: item = MyModel.objects.get(pk=id) except MyModel.DoesNotExist: raise Http404("Item does not exist") # Proceed with the rest of the view return render(request, 'template.html', {'item': item})
from django.http import Http404

def my_view(request, id):
    try:
        item = MyModel.objects.get(pk=id)
    except MyModel.DoesNotExist:
        raise Http404("Item does not exist")

    # Proceed with the rest of the view
    return render(request, 'template.html', {'item': item})

2. Using get_object_or_404()

Django provides a shortcut function get_object_or_404() that encapsulates the try-except block used with Http404. It tries to get an object from the model and if it fails, it automatically raises Http404. Here’s how to use it:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from django.shortcuts import get_object_or_404, render
def my_view(request, id):
item = get_object_or_404(MyModel, pk=id)
return render(request, 'template.html', {'item': item})
from django.shortcuts import get_object_or_404, render def my_view(request, id): item = get_object_or_404(MyModel, pk=id) return render(request, 'template.html', {'item': item})
from django.shortcuts import get_object_or_404, render

def my_view(request, id):
    item = get_object_or_404(MyModel, pk=id)
    return render(request, 'template.html', {'item': item})