【Django】urls.pyとは?URL設定を完全解説!

Django

DjangoでWebアプリを作成する際に必要なステップの1つが「URL設定」です。

URLはユーザーがブラウザで指定しますが、DjangoではこのURLが、サーバー内でどのビューを呼び出すのかのマッピングを持っています。

この記事では、DjangoにおけるURL設定について、1から詳しく説明します。


1. URLとは

前提となる部分ですが、URLについて軽く触れておきます。

URL(Uniform Resource Locator)は、Web上のリソース(例えばHTMLページや画像ファイルなど)の場所を示すアドレスです。

Djangoでは、このURLを利用してユーザーが特定のページにアクセスできるようにし、リクエスト内容を適切なビューに振り分ける役割を担っています。

DjangoでのURL設定は、Webアプリケーションの「入り口」となる非常に重要な部分です。


2. 構成図とURLディスパッチャ

以下は、Djangoのリクエスト処理の全体的な流れを図式化したものです。
(図はあくまで、イメージです。)

Djangoは、ユーザーからのURLとして、リクエストを受け取った後、そのリクエストを適切なビューにディスパッチ(振り分け)します。この仕組みを「URLディスパッチャ」と呼びます。

この一連の流れがDjangoアプリケーションの基本となります。大枠を理解した上で、URLディスパッチャの設定を記述する、urls.py(URL Conf)について見ていきましょう。

3. urls.pyの役割

まず、urls.pyの役割ですが、URLとビュー(view)を結びつけることです。
これを「URLルーティング」と呼びます。

DjangoはリクエストされたURLをurls.pyで定義されたパターンと照合し、一致するビューを実行します。

3-1. 動作の流れ

簡単に以下の処理の流れを追ってみましょう。

1.リクエスト
  ユーザーがhttps://example.com/blog/にアクセス。
2.urls.py
  パスblog/が一致し、views.indexが呼び出される。
3.views.py(index
  ”Welcome to the Blog!”というレスポンスを返す。

1. リクエスト

ユーザーがhttps://example.com/blog/にアクセスすると、ビューを呼び出すためにviews.pyをインポートして、ルーティングを定義します。

# urls.py

from django.contrib import admin
from django.urls import path
from blog import views  # blogアプリのviewsをインポート

urlpatterns = [
    path('admin/', admin.site.urls),  # 管理画面
    path('blog/', views.index, name='index'),  # "https://example.com/blog/" に対応
]

2. ビュー関数を定義するviews.py

urls.pyから呼び出された、view内でレスポンスに必要な処理を行います。

# blog/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome to the Blog!")  # 簡単なレスポンス

3. urls.py(URLConf)は2つある

Djangoにおける、プロジェクトとアプリについては理解しておく必要があるので、曖昧な方はこちらの記事を参考にして下さい。

Djangoで、以下のコマンドを打つと、初期状態では以下のようなフォルダ構成になると思います。

$ django-admin startproject project .
$ python manage.py startapp app

Djangoでは、URLのルーティングを管理するためにurls.pyというファイルが使われますが、実際には2種類のurls.pyを利用するのが一般的です。

プロジェクトフォルダ内には、予めurls.pyが生成されますが、app配下には存在しないのでアプリケシーション配下のurls.pyは自分で作成する必要があります。

それぞれ説明します。

プロジェクトレベルのurls.py
  ・プロジェクト全体のURLルーティングを管理します。
  ・アプリケーションごとのurls.pyファイルをincludeして統合します。

アプリケーションレベルのurls.py
  ・各アプリケーションごとのURLパターンを管理。
  ・個別のビューとの対応を記述します。

このように分割することで、大規模なプロジェクトでも管理が容易になります。
アプリケーションが複数ある場合でも、一元管理ができるということですね。


4. urls.pyの具体例

以下に簡単な例を記載します。

プロジェクトからブログアプリへ処理の流れと、ブログアプリの中で何が行われているかを確認できればOKです。

例: プロジェクトレベルのurls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # 管理画面
    path('blog/', include('blog.urls')),  # "blog"アプリのURLをインクルード
    path('shop/', include('shop.urls')),  # "shop"アプリのURLをインクルード
]

ポイント

  • include()を使ってblogアプリのurls.pyを読み込んでいます。
    こうすることで、blogアプリにおいて定義したviewを呼び出すことができます。。

例: アプリ(“blog”アプリ)で定義したurls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),  # トップページ
    path('post/<int:id>/', views.post_detail, name='post_detail'),  # 投稿詳細ページ
    path('about/', views.about, name='about'),  # アバウトページ
]

まとめ

DjangoのURL設定は、Webアプリケーションの構築における重要な部分です。URLConfやURLディスパッチャの仕組みを理解し、適切に設計されたURLパターンを作成することで、効率的で保守性の高いアプリケーションを構築できます。

この記事では、URLの基本概念から詳細設定までを網羅的に解説しました。ぜひこれを参考に、自分のプロジェクトに適用してみてください!

コメント

タイトルとURLをコピーしました