Menu
CoddyTech

전체 메뉴

Coddy Django 여정의 Django 기초 섹션에 포함된 레슨. 23개 중 21번째.

카페의 전체 메뉴는 MENU의 menu/views.py에 있습니다. 각 항목이 리스트인 섹션들의 딕셔너리입니다. 딕셔너리의 키와 값을 함께 반복하려면 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 %}로 닫습니다.

challenge icon

챌린지

중급
menu/menu.html은 이미 시작되어 있습니다. /menu/에 메뉴 페이지를 추가하세요:
  • MENU를 사용해 페이지를 렌더링하는 뷰와 menu라는 이름의 경로;
  • 각 섹션마다 <section class="menu-section"> 하나씩 만들고, 섹션 이름을 <h2>에 표시하기;
  • 각 항목마다 <li class="menu-item"> 하나씩 만들기: 항목 이름 다음에 <span class="price">$4.00</span>을 표시합니다.

Run을 누르세요. 미리보기에 /menu/가 열립니다.

직접 해보기

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 플레이그라운드