Menu
CoddyTech

התפריט המלא

חלק מהיחידה יסודות 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 %} משלה.

challenge icon

אתגר

בינוני
menu/menu.html כבר הוכן עבורך. הוסף את דף התפריט בכתובת /menu/:
  • תצוגה שמרנדרת אותו עם MENU, ונתיב בשם menu;
  • <section class="menu-section"> אחד לכל יחידה, כשהשם שלה נמצא בתוך <h2>;
  • <li class="menu-item"> אחד לכל פריט: השם שלו, ולאחר מכן <span class="price">$4.00</span>.

לחץ על Run: התצוגה המקדימה נפתחת בכתובת /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

תרגלו בעצמכם: Django אונליין