Menu
CoddyTech

قالبك الأول

جزء من قسم أساسيات Django في رحلة Django على Coddy. الدرس 11 من 23.

أصبح كود HTML للصفحة الرئيسية طويلًا جدًا بحيث لا يتسع في سلسلة نصية بلغة Python. يحتفظ Django بكود HTML في قالب، وهو ملف تعرضه الواجهة. إليك واجهة عرض سلة التسوق:

from django.shortcuts import render


def cart(request):
    return render(request, "shop/cart.html")
render() يقرأ القالب ويملؤه ثم يعيد HttpResponse. يبحث Django عن "shop/cart.html" في مجلد templates/ لكل تطبيق ضمن INSTALLED_APPS في settings.py. لذا يجب التأكد من أمرين:
  • وجود التطبيق في INSTALLED_APPS؛
  • وجود الملف في shop/templates/shop/cart.html. تكرار shop يميّز هذا الملف عن ملف cart.html في تطبيق آخر.

إذا أخفقت في أي منهما، فسيتعطل عرض الصفحة مع ظهور TemplateDoesNotExist، مع سرد جميع المجلدات التي بحث فيها Django. ينشئ الوسم {% url %} في home.html رابط «حول»؛ وسيشرح درس لاحق هذا الوسم.

challenge icon

التحدي

سهل

شفرة HTML للصفحة الرئيسية جاهزة في menu/templates/menu/home.html. اجعل العرض home يعرضها، وتأكد من أن Django يستطيع العثور عليها.

اضغط على Run: يظهر في شريط عنوان الموقع Corner Café. إذا ظهرت صفحة TemplateDoesNotExist الصفراء، فاقرأ أسماء المجلدات التي بحث فيها.

جرّب بنفسك

from django.http import Http404, HttpResponse
from django.urls import reverse

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):
    about_url = reverse("menu:about")
    return HttpResponse(
        "<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>"
        f'<a href="{about_url}">About us</a>'
    )


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):
    if slug not in DRINKS:
        raise Http404(f"No drink called {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