slugによるページ
CoddyのDjangoジャーニー「クラスベースビュー」セクションの一部。レッスン 6/18。
/jobs/7/では、仕事について何もわかりません。/jobs/python-developer-brightline/なら、人にも検索エンジンにも、それが何なのかが伝わります。この読みやすい部分はスラッグです。小文字の単語をハイフンでつないだものです。すべての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もスラッグも見つからず、エラーになります。
チャレンジ
簡単求人ページで ID の代わりにスラッグを使うようにします:
jobs/urls.pyでは、detailルートが求人の pk の代わりにスラッグを受け取ります。job_list.htmlでは、各リンクが求人のスラッグを渡します。
「Run」を押して、/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プレイグラウンド