Django: URL ディスパッチャ, URLconf
目次

URL ディスパッチャ

  • 例外のハンドリングもしてくれる

    • マッチするURLが見つからなかった場合は handler404 -> 404.html を返してくれたりする

URLconf

  • urlpatterns にリストで書く

書き方

  • config/urls.py

    urlpatterns = [
        # Django2.0 から path になった
        # 後ろには / つける、前にはつけないのが慣習
        path('admin/', admin.site.urls),
        path('', views.index, name='index'),
        # アプリケーションディレクトリごとに1つずつ urls.py を配置するのがベストプラクティス
        path('accounts/', include('accounts.urls')),  # /accounts/ で始まるURLパターンは accounts.urls 見てね
        path('shop/', include('shop.urls')),          # /shop/ で始まるURLパターンは shop.urls 見てね
        # GenericView: 短いので、URLconf に直接書くこともある
        path(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),  # TemplateView
        path(r'^$', RedirectView.as_view(template_name='index.html'), name='index'),  # RedirectView
    ]
    
  • shop/urls.py

    # app_name:
      # * 必ず設定する、アプリケーション名と同じにする
      # * reverse メソッドや url タグから `名前空間名.名前空間内の name>` で逆引きできるようにするため
    app_name = 'shop'
    urlpatterns = [
        path('', views.index, name='index'),
        # パスコンバーター:
          # * ビュー関数を呼び出すときのキーワード引数として使われる
          # * int, str, path, slug, uuid の 5種類がある、自作も可
        path('<int:book_id>/', views.detail, name='detail'),
    ]