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 の代わりにスラッグを使うようにします:

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