Menu
CoddyTech

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.

challenge icon

Thử thách

Dễ

Chuyển các trang công việc từ ID sang slug.

  1. Trong jobs/urls.py, sửa route detail để nhận slug của công việc thay vì pk.
  2. 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