القائمة الكاملة
جزء من قسم أساسيات Django في رحلة Django على Coddy. الدرس 21 من 23.
توجد قائمة المقهى الكاملة في MENU ضمن menu/views.py: قاموس من الأقسام، كلٌّ منها قائمة من الأصناف. للتكرار على مفاتيح القاموس وقيمه معًا، استدعِ أسلوب items الخاص به. يستدعي القالب الأسلوب من دون أقواس، ويمكن للحلقة تفكيك قيمتين، كما في for key, value in d.items() في Python. عروض خاصة يومية لأسبوع كامل:
{% for day, specials in week.items %}
<h3>{{ day }}</h3>
<p>{{ specials|join:", " }}</p>
{% endfor %}كل قيمة هي قائمة، لذا يمكن التكرار على عناصرها بدورها: حلقة {% for %} داخل حلقة {% for %}، وتُغلق كل واحدة منهما بوسم {% endfor %} خاص بها.
التحدي
متوسطأضِف صفحة القائمة الكاملة.
- في
menu/views.py، اكتب عرضًا يعرضmenu/menu.htmlمع تمريرMENUعلى شكلmenu. - في
menu/urls.py، أضِف المسارmenu/بالاسمmenu. - في
menu.html، أنشئ حلقة على الأقسام: عنصر<section class="menu-section">واحد لكل قسم، وضع اسمه داخل<h2>. وداخل ذلك، أنشئ حلقة على عناصره: عنصر<li class="menu-item">واحد لكل عنصر، ثم الاسم، ثم<span class="price">$4.00</span>.
افتح /menu/: ستعرض الصفحة Coffee وTea وCakes، وسعر Carrot Cake هو $4.00.
جرّب بنفسك
from django.http import Http404, HttpResponse
from django.shortcuts import render
DRINKS = {
"espresso": {
"slug": "espresso",
"name": "Espresso",
"price": 2.5,
"description": "A short, strong shot of coffee.",
"sold_out": False,
},
"latte": {
"slug": "latte",
"name": "Latte",
"price": 3.5,
"description": "Espresso with lots of steamed milk.",
"sold_out": False,
},
"flat-white": {
"slug": "flat-white",
"name": "Flat White",
"price": 3.75,
"description": "Espresso with a thin layer of silky milk.",
"sold_out": False,
},
"hot-chocolate": {
"slug": "hot-chocolate",
"name": "Hot Chocolate",
"price": 3,
"description": "Dark chocolate melted into warm milk.",
"sold_out": True,
},
}
MENU = {
"Coffee": [
{"name": "Espresso", "price": 2.5},
{"name": "Latte", "price": 3.5},
{"name": "Flat White", "price": 3.75},
],
"Tea": [
{"name": "Green Tea", "price": 2.5},
{"name": "Chai", "price": 3.25},
],
"Cakes": [
{"name": "Carrot Cake", "price": 4},
{"name": "Lemon Tart", "price": 3.5},
],
}
def home(request):
return render(request, "menu/home.html", {"special": DRINKS["flat-white"]})
def drink_list(request):
return render(request, "menu/drinks.html", {"drinks": DRINKS.values()})
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