Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 8 of 9 · Django Views & URL Routing
Interview question

How do you use get_object_or_404() and get_list_or_404() in Django views? Django views में get_object_or_404() और get_list_or_404() कैसे use करें?

Answer

These shortcut functions fetch an object or list, automatically raising an Http404 exception (rendering a 404 page) instead of an unhandled DoesNotExist exception when nothing matches.

from django.shortcuts import get_object_or_404, get_list_or_404, render

# WITHOUT the shortcut - manual exception handling
def book_detail_manual(request, pk):
    try:
        book = Book.objects.get(pk=pk)
    except Book.DoesNotExist:
        from django.http import Http404
        raise Http404('Book does not exist')
    return render(request, 'book_detail.html', {'book': book})

# WITH get_object_or_404() - one line, same behavior
def book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk)  # raises Http404 automatically if not found
    return render(request, 'book_detail.html', {'book': book})

# Can also filter with multiple conditions, like .get()
def available_book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk, available=True)
    return render(request, 'book_detail.html', {'book': book})

# Works with a QuerySet too, not just a Model class
def my_book_detail(request, pk):
    book = get_object_or_404(request.user.books.all(), pk=pk)
    return render(request, 'book_detail.html', {'book': book})

# get_list_or_404() - for lists, raises Http404 if the result is EMPTY
def author_books(request, author_id):
    books = get_list_or_404(Book, author_id=author_id)
    # unlike .filter() which returns an empty list silently,
    # this raises Http404 if the author has zero books
    return render(request, 'author_books.html', {'books': books})

# What the resulting 404 page looks like:
# In DEBUG=True: a detailed Django debug 404 page
# In DEBUG=False: your custom templates/404.html template

ये shortcut functions object/list fetch करते हैं, कुछ न मिलने पर unhandled DoesNotExist exception की बजाय automatically Http404 exception raise करते हैं (404 page render होता है)।

from django.shortcuts import get_object_or_404, get_list_or_404, render

# Shortcut के बिना - manual exception handling
def book_detail_manual(request, pk):
    try:
        book = Book.objects.get(pk=pk)
    except Book.DoesNotExist:
        from django.http import Http404
        raise Http404('Book मौजूद नहीं')
    return render(request, 'book_detail.html', {'book': book})

# get_object_or_404() के साथ - एक line
def book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk)
    return render(request, 'book_detail.html', {'book': book})

def available_book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk, available=True)
    return render(request, 'book_detail.html', {'book': book})

def my_book_detail(request, pk):
    book = get_object_or_404(request.user.books.all(), pk=pk)
    return render(request, 'book_detail.html', {'book': book})

# get_list_or_404() - list खाली होने पर Http404
def author_books(request, author_id):
    books = get_list_or_404(Book, author_id=author_id)
    return render(request, 'author_books.html', {'books': books})

Was this answer clear?