はじめに
Djangoの私的学習メモです。
ChatGPT4にて調べた内容と追加で調べた内容を見返せるように記事としてまとめました。
情報の裏取りはしていないので間違いがありましたらご指摘いただけると幸いです。
urlpatternsの役割
urlpatterns
はDjangoフレームワークにおける重要なコンポーネントで、URLとビューの間のマッピングを定義します。これによりDjangoは受け取ったHTTPリクエスト(具体的にはURL)を適切なビュー関数またはビュークラスにルーティングすることができます。
具体的には、urlpatterns
はurls.py
という設定ファイルに定義されるPythonのリストで、その各要素はpath()
関数またはre_path()
関数によって生成されたURLパターンです。これらの関数は特定のURLパターンをビューと関連付ける役割を果たします。
urlpatternsとpath関数の記載方法について
urlpatternsはPythonのリストで、その各要素はpath()関数またはre_path()関数によって生成されたURLパターンです。
path()関数は3つの引数を受け付けます:
-
ルート(route): URLのパターンを文字列で指定します。このパターンはビューが呼び出されるべきURLを定義します。
-
ビュー(view): 指定されたURLパターンがマッチしたときに呼び出されるビュー関数またはクラスベースビューを指定します。
-
名前(name、オプション): URLパターンに名前を付けることができます。これにより、テンプレートやビュー内からこのURLパターンを参照することが可能になります。
たとえば、次のようにurlpatternsを定義することができます:
from django.urls import path
from . import views
urlpatterns = [
#path('root', view, name='name')
path('', views.home, name='home'),
path('contact/', views.contact, name='contact'),
path('about/', views.about, name='about'),
]
path()関数のルートにはドメイン以降を記載する。
この例では、上から順に
'http://yourwebsite.com/'
'http://yourwebsite.com/contact/'
'http://yourwebsite.com/about/'
に対するリクエストにそのページのviewをマッピングしている。
path()関数に加えて、re_path()関数もURLパターンを定義するために使用することができます。re_path()関数は正規表現を使ってより複雑なURLパターンを定義することができます。
また、include()関数を使って他のurls.pyモジュールからURLパターンをインクルードすることができます。これは特に大規模なプロジェクトや、複数のDjangoアプリケーションを使用している場合に有用です。
from django.urls import include, path
urlpatterns = [
path('posts/', include('posts.urls')),
]
from django.urls import path
from . import views
urlpatterns = [
path('',views.index, name='index')
]
上記の場合、posts/
のURLはposts.urls
モジュール内のURLパターンにマッピングされる。具体的には、posts/
がリクエストされたとき、posts.urls
モジュール内の``(空文字列)にマッピングされる。
そしてposts.urls
モジュール内では、``(空文字列)がviews.index
ビューにマッピングされているので、`posts/`のURLがリクエストされたとき、`views.index`ビューが呼び出される。
したがって、この設定により'posts/'
URLはviews.index
ビューにマッピングされ、views.pyにて定義されたindex関数が実行される。
from django.shortcuts import render
def index(request):
return render(request, 'posts/index.html')
views.pyのindex関数はpostsディレクトリ内のindex.pyをレンダリング(HTMLに変換)し返す。
このテンプレート(今例はposts/index.html)はposts/templates/posts/ディレクトリ内に存在する必要がある。
これは、Djangoのテンプレート検索アルゴリズムがアプリケーションのtemplates/サブディレクトリ内を探すからです。
※postsは各アプリケーション名に置き換えてください
したがって、'http://yourwebsite.com/' のリクエストが来ると 'posts/index.html' を返すという結果が得られる。
以上がurlpatternsの基本的な使用方法です。