1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Django学習備忘録 -urlpatternsとpath関数-

Last updated at Posted at 2023-06-09

はじめに

Djangoの私的学習メモです。
ChatGPT4にて調べた内容と追加で調べた内容を見返せるように記事としてまとめました。
情報の裏取りはしていないので間違いがありましたらご指摘いただけると幸いです。

urlpatternsの役割

urlpatternsはDjangoフレームワークにおける重要なコンポーネントで、URLとビューの間のマッピングを定義します。これによりDjangoは受け取ったHTTPリクエスト(具体的にはURL)を適切なビュー関数またはビュークラスにルーティングすることができます。

具体的には、urlpatternsurls.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を定義することができます:

urls.py
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アプリケーションを使用している場合に有用です。

myApp/urls.py
from django.urls import include, path

urlpatterns = [
    path('posts/', include('posts.urls')),
]
posts/urls.py
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関数が実行される。

views.py
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の基本的な使用方法です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?