Trang riêng cho mỗi loại đồ uống
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 7 trên 23.
Đồ uống của quán cà phê giờ nằm trong DRINKS, một từ điển trong menu/views.py. Các khóa như flat-white là slug: những từ viết thường, nối với nhau bằng dấu gạch nối, được tạo ra để dùng trong URL.
Bộ chuyển đổi slug khớp với chữ cái, chữ số, dấu gạch nối và dấu gạch dưới. Ở đây, nó tạo một trang cho mỗi nhân viên, tra cứu thông tin trong một từ điển:
path("team/<slug:handle>/", views.team_member),
def team_member(request, handle):
person = STAFF[handle]
return HttpResponse(f"<h2>{person['role']}</h2>")Với /team/maya-cohen/, hàm xử lý lấy handle="maya-cohen" và dùng giá trị này làm khóa. Một tuyến đường và một hàm xử lý phục vụ toàn bộ từ điển: thêm một mục mới là có ngay trang tương ứng mà không cần viết thêm code.
Thử thách
DễTạo một trang riêng cho mỗi thức uống trong DRINKS.
- Trong
menu/urls.py, thêm một đường dẫn khớp với/drinks/latte/,/drinks/flat-white/và mọi khóa khác. Trỏ đường dẫn đó đếnviews.drink. - Trong
menu/views.py, viết một hàm xemdrinkđể tra khóa trongDRINKS. Hàm này trả về tên trong thẻ<h1>, sau đó là phần mô tả trong thẻ<p>.
Mở /drinks/flat-white/: bạn sẽ thấy Flat White.
Tự làm thử
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>")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản về Django
1Trang Django đầu tiên của bạn
Xin chào, DjangoTrang thứ hai2URL động
Bộ chuyển đổi đường dẫnTrang riêng cho mỗi loại đồ uốngChuỗi truy vấnNâng ngoại lệ Http404Tự luyện tập: Playground Django