Menu Lengkap
Termasuk bagian Dasar-Dasar Django dalam perjalanan Django di Coddy. Pelajaran 21 dari 23.
Menu lengkap kafe ada di MENU dalam menu/views.py: sebuah dictionary berisi beberapa bagian, yang masing-masing berupa list item. Untuk melakukan perulangan pada key dan nilai dictionary secara bersamaan, panggil method items. Template memanggil method tanpa tanda kurung, dan perulangan dapat membagi dua nilai, seperti for key, value in d.items() Python. Berikut menu spesial harian selama seminggu:
{% for day, specials in week.items %}
<h3>{{ day }}</h3>
<p>{{ specials|join:", " }}</p>
{% endfor %}Setiap nilai berupa list, jadi bisa dilakukan perulangan secara bergantian: sebuah {% for %} di dalam {% for %}, yang masing-masing ditutup dengan {% endfor %}.
Tantangan
Sedangmenu/menu.html sudah disiapkan untukmu. Tambahkan halaman menu di /menu/:- sebuah view yang merendernya dengan
MENU, dan sebuah route bernamamenu; - satu
<section class="menu-section">untuk setiap bagian, dengan namanya di dalam<h2>; - satu
<li class="menu-item">untuk setiap item: namanya, lalu<span class="price">$4.00</span>.
Tekan Jalankan: pratinjau akan membuka /menu/.
Coba sendiri
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.")
Semua pelajaran di Dasar-Dasar Django
4Tata Letak dan File Statis
Pewarisan TemplateJudul untuk Setiap HalamanLatihan sendiri: Playground Django