Menu
CoddyTech

Giờ mở cửa

Thuộc phần Kiến thức cơ bản về Django trong hành trình Django của Coddy. Bài học 22 trên 23.

Quán cà phê có giờ mở cửa mới: mở muộn hơn vào thứ Sáu và thứ Bảy, đóng cửa vào Chủ nhật. Giờ mở cửa nằm trong HOURS ở menu/views.py, với một từ điển cho mỗi ngày, và opens của Chủ nhật là None. Trang /hours/ vẫn trả về một dòng văn bản.

Lịch trình phù hợp với bảng HTML: mỗi hàng dùng một <tr> và mỗi ô dùng một <td>.

<table>
    <tr><td>Espresso</td><td>$2.50</td></tr>
    <tr><td>Latte</td><td>$3.50</td></tr>
</table>

None được xem là false trong {% if %}, vì vậy bạn có thể thông báo rằng quán đóng cửa vào ngày đó trong phần {% else %}.

challenge icon

Thử thách

Trung bình

Hiển thị giờ mở cửa của quán cà phê dưới dạng bảng.

  1. Trong menu/views.py, hãy để hours hiển thị menu/hours.html và truyền HOURS cho trang.
  2. Trong hours.html, thêm một hàng cho mỗi ngày: ngày đó, rồi đến opens và closes tương ứng, như 8:00 to 18:00. Ngày không có opens sẽ hiển thị Closed.

Mở /hours/: Chủ nhật hiển thị Closed.

Tự làm thử

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},
    ],
}


HOURS = [
    {"day": "Monday", "opens": "8:00", "closes": "18:00"},
    {"day": "Tuesday", "opens": "8:00", "closes": "18:00"},
    {"day": "Wednesday", "opens": "8:00", "closes": "18:00"},
    {"day": "Thursday", "opens": "8:00", "closes": "18:00"},
    {"day": "Friday", "opens": "8:00", "closes": "20:00"},
    {"day": "Saturday", "opens": "9:00", "closes": "20:00"},
    {"day": "Sunday", "opens": None, "closes": None},
]


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 full_menu(request):
    return render(request, "menu/menu.html", {"menu": MENU})


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.")

Tất cả bài học trong Kiến thức cơ bản về Django

Tự luyện tập: Playground Django