Menu
CoddyTech

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もスラッグも見つからず、エラーになります。

challenge icon

チャレンジ

簡単

求人ページをIDではなくスラッグで表示するようにしましょう。

  1. jobs/urls.pyで、detailルートが求人のpkではなくスラッグを受け取るようにします。
  2. job_list.htmlで、各リンクに求人のスラッグを渡すようにします。

/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プレイグラウンド