【Django】URLマッピング・urls.pyの設定方法|PythonによるWebアプリ開発#3

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

この記事では、Djangoフレームワークにて活用するurls.pyをご紹介します。多様なURLマッピングメソッドを詳しく把握できます。複雑なアプリ開発を行う際は、URLの管理が煩雑になりがちです。そういった事態を阻止するために必要なノウハウを学んでいきましょう。

目次

【Django】urls.py

urls.pyファイルは、WebブラウザにアクセスするためのURLの管理に利用されます。つまり、どのアドレスにアクセスしたらどの処理内容を実行するか定義するのがここでの役割です。

本記事ではurls.pyを活用したアドレス管理方法について詳しく解説します。

【Django】urls.pyを活用した画面表示・アドレス管理設定

実際にDjangoにてURLを管理する方法を見ていきましょう。まず、上図のようなフォルダ構成をもとにDjangoプロジェクトが開始された場合を考えます。プロジェクトフォルダ内とアプリケーションフォルダ内にそれぞれurls.pyがあることに着目ください。2つのurls.pyを用いてURLマッピングを実践する際、管理方法は2通り検討できます。

  1. アプリケーション管理フォルダ毎にURLを管理する方法
  2. アプリケーション管理フォルダ毎にURLを管理する方法

それでは、2つの方法について詳しく見ていきましょう!

【方法①】プロジェクト管理フォルダ内でURL一元管理する方法

プロジェクト管理フォルダ内にあるurls.pyを活用し、アドレスを一元管理する方法です。アプリケーションフォルダの処理を複数追加するたびに、プロジェクトフォルダ内のurls.pyを修正する必要がでてきます。単一アプリケーションのみの実装であれば有用な方法と言えますが、上図のように複数アプリケーションを管理する場合、URL管理が煩雑化する恐れがあるため、あまりお勧めしない方法です。

【方法②】アプリケーション管理フォルダ毎にURLを管理する方法

アプリケーション管理フォルダ毎にurls.pyを作成し、プロジェクトフォルダ内のurls.pyとアプリケーションフォルダ内のurls.pyを紐付けます。そして、アプリケーション内のurls.pyで直接的に対象のアプリケーションフォルダのアドレスを管理するといった方法です。

アプリケーションのアドレスは対象アプリケーションフォルダ内で管理する」が基本原則の考え方です。Django設計の場合は、こちらの方法が推奨されます。本記事でもこちらの方法を採用し、後述より具体的なURLマッピング方法をご紹介していきます。

【Django】urls.pyのコーディング実践|URLマッピング手順

アプリケーション管理フォルダ毎にURLを管理する方法をもとにURLマッピングしてみましょう。

上図のように実際にアプリケーション管理フォルダ毎にurls.pyを作成し、プロジェクトフォルダ内のurls.pyと紐付けます。そして、アプリケーションフォルダ内のurls.pyで対象アプリケーションフォルダのアドレスを管理できるようにしていきます。以下、順を追って見ていきましょう!

アプリケーション管理フォルダ(App_Folder)内にurls.py

アプリケーション管理フォルダ(App_Folder)内のurls.pyに着目し、下記のようにコーディングします。

#path関数をインポート
from django.urls import path
# 同ディレクトリからview.pyをインポート
from . import views

#path関数(アクセスするアドレス、呼び出す処理)を追記
urlpatterns = [
    path('', views.index, name='index'),
]

【参考】path関数

インポートしているpath関数とは、対象アドレスにアクセスしたら指定の処理実行を促す関数です。path関数は、urlpatternsというリストの中に記載します。以下のように記述すると覚えましょう。

path(アクセスするアドレス, 呼び出す処理, name=パス名)

第1引数にアドレスを指定し、第2引数に実行する処理を指定します。

第一引数は「‘ ‘」と記載すると、urls.pyを格納しているアプリケーション管理フォルダ(App_Folder)をサーバーにて動作させた際、初めに処理が実行されます。

【参考】path関数で呼び出す表示画面設定|views.py

path関数記載の呼び出す処理には、同ディレクトリにあるview.pyの関数を呼び出すこととします。その場合、まず「from . import views」とインポートします。次に、path関数内の呼び出す処理内容記載部分に「views.関数名」と記載します。(今回の例だとviews.indexと記載しており、これは、index関数という予め定義された関数がview.pyにある前提としています。)

これでアプリケーションフォルダ内のurls.pyの準備は完了です。次は、実際にこのurls.pyを機能させるために、プロジェクトフォルダ内のurls.pyを修正していきましょう。

プロジェクト管理フォルダ(Project_Folder)内のurls.py

プロジェクト管理フォルダ(Project_Folder)のurls.pyに着目し、下記のようにコーディングします。

from django.contrib import admin
from django.urls import path
# Include関数をインポート
from django.urls import include

# path関数でApp_Folder内のurls.pyを読み込むために、include関数を記述
urlpatterns = [
    path('admin/', admin.site.urls),                    # 管理画面のPath
    path('App_Folder/', include('App_Folder.urls')),    # アプリケーション管理フォルダのurls.pyと関連づけるpath
]

【参考】include関数を活用したURLマッピング手順

プロジェクトフォルダ内のurls.pyでの一括URL管理ではなく、アプリケーション管理フォルダ毎にURLを管理する場合、include関数が重要な役割を果たします。

include関数は、指定した引数に対応するモジュールを読み込む関数です。作成したアプリケーション管理フォルダ内にあるurls.pyを読み込み、プロジェクト管理フォルダ内のurls.pyと紐付けることができます。

include関数のみ利用した場合、ひな型コードは次のように記述できます。

from django.urls import include

#urlパターンを指定
urlpatterns = [
    path('App_Folder/', include('App_Folder.urls')),
・・・
]

Include関数の中身は、include(アプリケーション管理フォルダのurls.pyのディレクトリ)という型式で記述します。

接続テスト

これで全てのurls.pyの改修が完了です。確認として、ローカルサーバーが起動し、指定したアドレスで処理内容が反映されているか確認してみましょう。(Macの場合はターミナル、Windowsの場合はコマンドプロンプトを用いると良いでしょう)

python manage.py runserver

次に、以下のアドレスにアクセスし、確認します。今回の場合、アプリケーション管理フォルダには「App_Folder」と入力します。views.pyで記述した処理が正しく反映されていれば、うまく動作していると言えます。

http://localhost:8000/アプリケーション管理フォルダ名/

【参考】Djangoの解説記事一覧

最後までご覧いただきありがとうございました。当サイトではDjangoフレームワークを用いた解説記事を多数取り扱っております。次のように体系的に整理しておりますため学習にお役立て下さい。

Django学習に最適!

当サイトが運営するDjango記事一覧

【参考】Pythonでできること・お仕事探し

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次