رفع Http404
جزء من قسم أساسيات Django في رحلة Django على Coddy. الدرس 9 من 23.
افتح /drinks/mocha/. يطابق المسار، لكن DRINKS["mocha"] يرفع KeyError، ويستجيب الموقع بالحالة 500، أي خطأ في الخادم. بالنسبة إلى الزائر، يبدو موقعك معطّلًا.
الإجابة الصحيحة هي 404، أي لا توجد صفحة كهذه. تشير دالة العرض إلى ذلك برفع Http404. يحتوي المقهى على اثنتي عشرة طاولة، لذا يمكن لدالة العرض table رفض /table/40/:
from django.http import Http404, HttpResponse
def table(request, number):
if number > 12:
raise Http404(f"There is no table {number}")
...raise، وليس return: إن Http404 استثناء، ويحوّله Django إلى صفحة 404 المعتادة. أما إرجاع HttpResponse("No such page") فيعرض العبارة بالحالة 200، وهذا يخبر المتصفحات ومحركات البحث بأن الصفحة موجودة.التحدي
سهلاجعل طريقة العرض drink ترفع Http404 عندما لا يكون المعرّف المختصر ضمن DRINKS. يظل /drinks/latte/ يعمل.
اضغط على Run: تُفتح المعاينة على /drinks/mocha/، وتعرض الآن صفحة 404 مع رسالتك.
جرّب بنفسك
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.")
جميع دروس أساسيات Django
تدرّب بنفسك: Playground لـ Django