القائمة الكاملة
جزء من قسم أساسيات 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/menu.html مُجهّز لك. أضف صفحة القائمة على المسار /menu/:- عرضًا يعرضها باستخدام
MENU، ومسارًا باسمmenu؛ - عنصر
<section class="menu-section">واحدًا لكل قسم، مع اسمه داخل<h2>؛ - عنصر
<li class="menu-item">واحدًا لكل صنف: اسمه، ثم<span class="price">$4.00</span>.
اضغط على تشغيل: ستُفتح المعاينة على /menu/.
جرّب بنفسك
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