전체 메뉴
Coddy Django 여정의 Django 기초 섹션에 포함된 레슨. 23개 중 21번째.
카페의 전체 메뉴는 menu/views.py의 MENU에 있습니다. 섹션들의 딕셔너리이며, 각 섹션은 항목 목록입니다. 딕셔너리의 키와 값을 함께 반복하려면 items 메서드를 호출하세요. 템플릿에서는 괄호 없이 메서드를 호출하며, Python의 for key, value in d.items()처럼 반복문에서 두 값을 언패킹할 수 있습니다. 일주일 동안 매일 제공되는 특별 메뉴:
{% for day, specials in week.items %}
<h3>{{ day }}</h3>
<p>{{ specials|join:", " }}</p>
{% endfor %}각 값은 목록이므로, 그 안의 항목도 차례로 반복할 수 있습니다. {% for %} 안에 {% for %}를 넣고, 각각을 해당하는 {% endfor %}로 닫습니다.
챌린지
중급전체 메뉴 페이지를 추가하세요.
menu/views.py에서MENU를menu로 전달하여menu/menu.html을 렌더링하는 뷰를 작성하세요.menu/urls.py에 이름이menu인menu/경로를 추가하세요.menu.html에서 각 섹션을 반복하세요. 각 섹션마다<section class="menu-section">하나를 만들고, 섹션 이름은<h2>에 넣으세요. 그 안에서 각 항목을 반복하세요. 각 항목마다<li class="menu-item">하나를 만들고, 이름 다음에<span class="price">$4.00</span>을 넣으세요.
/menu/를 여세요. Coffee, Tea, Cakes가 표시되고 Carrot Cake의 가격은 $4.00입니다.
직접 해보기
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 플레이그라운드