はじめに
Django2.0以降のURLconf(urls.py)に関して、公式ドキュメントでまだ翻訳されていない箇所を読んで調べた内容を簡単にまとめます(公式ドキュメントの翻訳記事というわけではありません)。
urls.pyでの振り分け例
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
]
-
/articles/2005/03/
というURLの場合、3番目の'articles/<int:year>/<int:month>/'
にマッチします。 -
/articles/2003/
というURLの場合、2番目の'articles/<int:year>/'
ではなく、1番目の'articles/2003/'
にマッチします。Djangoは、urlpatternsを順に調べて最初にマッチしたパターンの関数を呼び出すためです。 -
/articles/2003
というURLの場合、最後に/
が無いため、どのパターンにもマッチしません。
urls.pyで呼び出す関数の引数について
-
第一引数にはHttpRequestオブジェクトのインスタンスが渡されます。
-
<int:year>
などのパスコンバータが使用されている場合、その部分がキーワード引数となります。
from django.urls import path
from . import views
urlpatterns = [
path('articles/<int:year>/<int:month>/', views.month_archive),
]
例えば、/articles/2005/03/
というURLの場合、Djangoはviews.month_archive(request, year=2005, month=3)
を呼び出します。
urls.pyとGETのパラメータ
urls.pyでの振り分けでは、GETのパラメータを考慮した記述は不要です。
from django.urls import path
from . import views
urlpatterns = [
path('books/', views.BookListView.as_view()),
]
例えば、/books/?page=3
へのリクエストは、上記の'books/'
にマッチしてくれます。