按 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,然后就会崩溃。
挑战
简单将职位页面的标识从 id 改为 slug。
- 在
jobs/urls.py中,让detail路由接收职位的 slug,而不是 pk。 - 在
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 在线编辑器