Menu
CoddyTech

Die vollständige Speisekarte

Teil des Abschnitts Django-Grundlagen der Django-Journey von Coddy. Lektion 21 von 23.

Die vollständige Speisekarte des Cafés befindet sich in MENU in menu/views.py: ein Dictionary mit Bereichen, die jeweils eine Liste von Gerichten enthalten. Um gemeinsam über die Schlüssel und Werte eines Dictionarys zu iterieren, rufe dessen Methode items auf. In einer Vorlage wird eine Methode ohne Klammern aufgerufen, und eine Schleife kann zwei Werte entpacken, wie Pythons for key, value in d.items(). Eine Woche mit Tagesangeboten:

{% for day, specials in week.items %}
    <h3>{{ day }}</h3>
    <p>{{ specials|join:", " }}</p>
{% endfor %}

Jeder Wert ist eine Liste, über die wiederum iteriert werden kann: ein {% for %} innerhalb eines {% for %}, wobei jede Schleife mit ihrem eigenen {% endfor %} abgeschlossen wird.

challenge icon

Aufgabe

Mittel
menu/menu.html wurde bereits für dich angelegt. Füge die Menüseite unter /menu/ hinzu:
  • eine View, die sie mit MENU rendert, und eine Route namens menu;
  • einen <section class="menu-section">-Abschnitt pro Bereich, dessen Name in einem <h2> steht;
  • ein <li class="menu-item">-Element pro Artikel: sein Name, gefolgt von <span class="price">$4.00</span>.

Klicke auf Ausführen: Die Vorschau öffnet /menu/.

Probier es selbst

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.")

Alle Lektionen in Django-Grundlagen

Übe selbstständig: Django-Playground