Các trang theo Slug
Thuộc phần View dựa trên lớp trong hành trình Django của Coddy. Bài học 6 trên 18.
/jobs/7/ không cho biết gì về công việc. /jobs/python-developer-brightline/ cho mọi người và công cụ tìm kiếm biết đó là công việc gì. Phần dễ đọc đó gọi là slug: các từ viết thường được nối với nhau bằng dấu gạch nối. Mỗi Job đã có sẵn một slug trong trường slug.
Khi đối số URL có tên slug, một DetailView tìm hàng có trường slug khớp với đối số đó. Bạn có thể đổi cả hai tên. Một trang web công thức có đường dẫn "recipes/<slug:recipe_slug>/" cho view biết:
class RecipeDetailView(DetailView):
model = Recipe
slug_url_kwarg = "recipe_slug"slug_url_kwarg đặt tên cho đối số URL, còn slug_field đặt tên cho trường của model; cả hai đều mặc định là "slug". Nếu đổi tên đối số URL mà không báo cho view, nó sẽ không tìm thấy pk hay slug nào và gặp lỗi.
Thử thách
DễChuyển các trang công việc từ ID sang slug.
- Trong
jobs/urls.py, sửa routedetailđể nhận slug của công việc thay vì pk. - Trong
job_list.html, sửa từng liên kết để truyền slug của công việc.
Nhấp vào Python Developer trên /jobs/: địa chỉ là /jobs/python-developer-brightline/.
Tự làm thử
from django.urls import path
from . import views
app_name = "jobs"
urlpatterns = [
path("", views.HomeView.as_view(), name="home"),
path("about/", views.AboutView.as_view(), name="about"),
path("jobs/", views.JobListView.as_view(), name="list"),
path("jobs/<int:pk>/", views.JobDetailView.as_view(), name="detail"),
]
Tất cả bài học trong View dựa trên lớp
Tự luyện tập: Playground Django