每种饮料对应一个页面
本课属于 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",并用它作为键。一个路由和一个视图就能处理整个字典:添加新条目后,无需编写新代码,它就会有自己的页面。
挑战
简单为 DRINKS 中的每种饮品创建一个单独的页面。
- 在
menu/urls.py中添加一个路由,使其匹配/drinks/latte/、/drinks/flat-white/和其他所有键。将它指向views.drink。 - 在
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>")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
Django 基础中的所有课
自己练习: Django 在线编辑器