Menu
CoddyTech

Eksiksiz Menü

Coddy'nin Django Journey'sinin Django Temelleri bölümünün bir parçası. Ders 21 / 23.

Kafenin tam menüsü, bölümlerden oluşan ve her bölümün bir ürün listesi olduğu bir sözlük olarak MENU içinde, menu/views.py dosyasındadır. Bir sözlüğün anahtarları ve değerleri üzerinde birlikte döngü kurmak için items yöntemini çağırın. Bir şablon, yöntemi parantez kullanmadan çağırır ve bir döngü, Python'daki for key, value in d.items() gibi iki değeri açabilir. Günlük spesiyallerden oluşan bir hafta:

{% for day, specials in week.items %}
    <h3>{{ day }}</h3>
    <p>{{ specials|join:", " }}</p>
{% endfor %}

Her değer bir listedir; dolayısıyla bunun üzerinde de sırayla döngü kurulabilir: bir {% for %} döngüsünün içinde başka bir {% for %} döngüsü bulunur ve her biri kendi {% endfor %} etiketiyle kapatılır.

challenge icon

Görev

Orta
menu/menu.html senin için başlatıldı. /menu/ adresinde menü sayfasını ekle:
  • MENU ile sayfayı oluşturan bir görünüm ve menu adlı bir rota;
  • her bölüm için bir <section class="menu-section">, bölüm adı bir <h2> içinde;
  • her öğe için bir <li class="menu-item">: öğenin adı, ardından <span class="price">$4.00</span>.

Çalıştır'a bas: önizleme /menu/ adresinde açılır.

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