Menu
CoddyTech

Memunculkan Http404

Termasuk bagian Dasar-Dasar Django dalam perjalanan Django di Coddy. Pelajaran 9 dari 23.

Buka /drinks/mocha/. Rutenya cocok, tetapi DRINKS["mocha"] memunculkan KeyError, dan situs menampilkan status 500, yaitu error server. Bagi pengunjung, situsmu terlihat rusak.

Jawaban yang tepat adalah 404, halaman tidak ditemukan. Sebuah view menyatakan hal itu dengan memunculkan Http404. Kafe itu memiliki dua belas tabel, jadi view table dapat menolak /table/40/:

from django.http import Http404, HttpResponse


def table(request, number):
    if number > 12:
        raise Http404(f"There is no table {number}")
    ...
raise, bukan return: Http404 adalah exception, dan Django mengubahnya menjadi halaman 404 biasa. Mengembalikan HttpResponse("No such page") menampilkan kata-kata itu dengan status 200, yang memberi tahu browser dan mesin pencari bahwa halaman tersebut ada.
challenge icon

Tantangan

Mudah

Buat view drink memunculkan Http404 ketika slug tidak ada di DRINKS. /drinks/latte/ tetap berfungsi.

Tekan Run: pratinjau membuka /drinks/mocha/, yang sekarang menampilkan halaman 404 dengan pesanmu.

Coba sendiri

from django.http import HttpResponse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


def about(request):
    return HttpResponse("Corner Café opened in 2026.")


def hours(request):
    return HttpResponse("Open every day from 8:00 to 18:00.")


def contact(request):
    return HttpResponse("Write to us at hello@cornercafe.example.")


def table(request, number):
    return HttpResponse(f"<h1>Table {number}</h1>")


def drink(request, slug):
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = request.GET.get("size", "medium")
    if size not in ["small", "medium", "large"]:
        size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Semua pelajaran di Dasar-Dasar Django

Latihan sendiri: Playground Django