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.
Aufgabe
Mittelmenu/menu.html wurde bereits für dich angelegt. Füge die Menüseite unter /menu/ hinzu:- eine View, die sie mit
MENUrendert, und eine Route namensmenu; - 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
1Deine erste Django-Website
Hallo, DjangoEine zweite Seite4Layouts und statische Dateien
Template-VererbungEin Titel für jede SeiteÜbe selbstständig: Django-Playground