Eksiksiz Menü
Coddy'nin Django Journey'sinin Django Temelleri bölümünün bir parçası. Ders 21 / 23.
Kafenin menüsünün tamamı menu/views.py dosyasındaki MENU içinde bulunur: bölümlerden oluşan bir sözlük; her bölüm bir öğe listesidir. Bir sözlüğün anahtarları ve değerleri üzerinde birlikte döngü yapmak için items metodunu çağır. Bir şablonda metot parantez kullanılmadan çağrılır ve bir döngü, Python'daki for key, value in d.items() gibi iki değeri açabilir. Bir haftalık günlük özel ürünler:
{% for day, specials in week.items %}
<h3>{{ day }}</h3>
<p>{{ specials|join:", " }}</p>
{% endfor %}Her değer bir listedir, bu yüzden onun üzerinde de döngü yapılabilir: bir {% for %} döngüsünün içinde bir {% for %} döngüsü; her biri kendi {% endfor %} etiketiyle kapatılır.
Görev
OrtaTam menü sayfasını ekle.
menu/views.pydosyasında,MENUdeğerinimenuolarak kullanarakmenu/menu.htmldosyasını işleyen bir görünüm yaz.menu/urls.pydosyasınamenuadıylamenu/rotasını ekle.menu.htmldosyasında bölümler üzerinde döngü kur: her biri için bir<section class="menu-section">oluştur ve bölüm adını bir<h2>içine yaz. İçinde, öğeleri üzerinde döngü kur: her biri için bir<li class="menu-item">oluştur; önce adını, ardından<span class="price">$4.00</span>ekle.
/menu/ adresini aç: sayfada Coffee, Tea ve Cakes listelenir; Carrot Cake'in fiyatı $4.00 olur.
Kendin dene
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 Temelleri bölümündeki tüm dersler
Kendi başına pratik yap: Django playground