Menu
CoddyTech

按 Slug 生成页面

本课属于 Coddy Django 学习旅程的“基于类的视图”单元。第 6 课,共 18 课。

/jobs/7/ 没有说明这份工作是什么。/jobs/python-developer-brightline/ 则能告诉人们和搜索引擎具体是什么工作。这段易读的内容叫作 slug:用连字符连接的小写单词。每个 Job 都已经在自己的 slug 字段中有一个这样的值。

当 URL 参数命名为 slug 时,DetailView 会查找 slug 字段与之匹配的行。这两个名称都可以更改。路由为 "recipes/<slug:recipe_slug>/" 的食谱网站会这样告诉视图:

class RecipeDetailView(DetailView):
    model = Recipe
    slug_url_kwarg = "recipe_slug"

slug_url_kwarg 用来命名 URL 参数,slug_field 用来命名模型字段;两者的默认值都是 "slug"。如果重命名 URL 参数,却不告知视图,视图就既找不到 pk,也找不到 slug,然后就会崩溃。

challenge icon

挑战

简单

将职位页面的标识从 id 改为 slug。

  1. 在 jobs/urls.py 中,让 detail 路由接收职位的 slug,而不是 pk。
  2. 在 job_list.html 中,让每个链接传入职位的 slug。

点击 /jobs/ 页面上的 Python Developer:地址是 /jobs/python-developer-brightline/。

亲手试试

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"),
]

基于类的视图中的所有课

自己练习: Django 在线编辑器