Menu
CoddyTech

每种饮料对应一个页面

本课属于 Coddy Django 学习旅程的“Django 基础”单元。第 7 课,共 23 课。

咖啡馆的饮品现在存放在 menu/views.py 中的 DRINKS 字典里。字典的键(例如 flat-white)是slug,也就是由小写字母组成、用连字符连接并用于 URL 的词。

slug 转换器可以匹配字母、数字、连字符和下划线。这里,它会为每位员工提供一个页面,并从字典中查找对应信息:

path("team/<slug:handle>/", views.team_member),


def team_member(request, handle):
    person = STAFF[handle]
    return HttpResponse(f"<h2>{person['role']}</h2>")

对于 /team/maya-cohen/,视图会获取 handle="maya-cohen",并用它作为键。一个路由和一个视图就能处理整个字典:添加新条目后,无需编写新代码,它就会有自己的页面。

challenge icon

挑战

简单

为 DRINKS 中的每种饮品创建一个单独的页面。

  1. 在 menu/urls.py 中添加一个路由,使其匹配 /drinks/latte/、/drinks/flat-white/ 和其他所有键。将它指向 views.drink。
  2. 在 menu/views.py 中编写一个名为 drink 的视图,从 DRINKS 中查找对应的键。它会先在 <h1> 中返回名称,再在 <p> 中返回描述。

打开 /drinks/flat-white/,你会看到 Flat White。

亲手试试

from django.http import HttpResponse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


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>")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

Django 基础中的所有课

自己练习: Django 在线编辑器