Djangoのurls.pyをアプリごとに分割する方法を初心者向けに徹底解説
生徒
「DjangoでWebサイトを作っているんですが、urls.pyって1つのファイルに全部書くんですか?」
先生
「最初は1つでも動きますが、機能が増えると管理が大変になります。そのため、アプリごとにurls.pyを分ける方法があります。」
生徒
「アプリごとに分けるって、初心者でもできますか?」
先生
「大丈夫です。仕組みを順番に理解すれば、パソコンを触ったことがない人でもイメージできます。」
1. DjangoのURLルーティングとは何か
DjangoのURLルーティングとは、ブラウザで入力されたURLと、実際に処理を行うプログラムを結びつける仕組みです。たとえば「/login/」にアクセスしたらログイン画面を表示する、といった対応表のような役割を持っています。この対応表を管理しているのがurls.pyです。
初心者向けに例えると、URLルーティングは建物の案内板のようなものです。入口で行き先を見て、どの部屋に行くかを案内してくれます。Djangoでは、この案内板をプログラムで書いています。
2. urls.pyを分割しない場合の問題点
Djangoを学び始めたばかりの頃は、プロジェクト直下のurls.pyにすべてのURLを書くことが多いです。しかし、アプリが増えてくるとURLの数も増え、1つのファイルが長くなります。
その結果、どのURLがどの機能なのか分かりにくくなり、修正ミスも起きやすくなります。これはノートに全教科の内容を全部まとめて書いているような状態で、後から見返すのが大変になります。
3. アプリごとにurls.pyを分ける考え方
Djangoでは「アプリ」という単位で機能を分けて開発します。ログイン機能、商品管理機能、お問い合わせ機能などを、それぞれ別のアプリとして作るのが一般的です。
URLも同じ考え方で、アプリごとに管理すると見通しが良くなります。学校の教科ごとにノートを分けるようなイメージです。Djangoはこの構成を前提として作られているため、公式でも推奨されています。
4. プロジェクト側urls.pyの基本設定
まず、プロジェクト直下にあるurls.pyで、各アプリのurls.pyを読み込む設定を行います。ここではincludeという仕組みを使います。includeは「別のURL設定を読み込む」という意味です。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
この設定により、「/blog/」で始まるURLは、blogアプリ側のurls.pyに任せる、という流れになります。
5. アプリ側にurls.pyを作成する
次に、アプリのフォルダの中にurls.pyを新しく作成します。これは手動でファイルを作ります。最初は空のファイルでも問題ありません。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
ここでは、空のURLにアクセスしたときにindexというビューを呼び出す設定をしています。ドットから始まるimportは「同じアプリ内」を意味します。
6. ビューとの関係を理解しよう
URLルーティングは、ビューとセットで考えると理解しやすくなります。ビューとは、実際に画面を表示したり、処理を行ったりする部分です。
from django.http import HttpResponse
def index(request):
return HttpResponse("ブログのトップページです")
このように、URL → ビュー → 表示内容、という流れで処理が進みます。urls.pyはその入口を担当しています。
7. includeを使うメリットとSEOの関係
includeを使ってURLを分割すると、URL構造が整理され、意味のあるURLを作りやすくなります。これは検索エンジンにとっても理解しやすく、SEO対策としても有利です。
たとえば「/blog/」「/shop/」のように役割が分かれたURLは、ユーザーにも検索エンジンにも親切です。DjangoのURL設計は、Webサイトの品質向上にもつながります。
8. 初心者がつまずきやすいポイント
初心者がよく間違えるのが、アプリ側のurls.pyを作ったのに、プロジェクト側でincludeを書き忘れるケースです。この場合、URLにアクセスしてもページが表示されません。
また、アプリ名のスペルミスや、viewsの関数名の間違いもよくある原因です。エラーが出たときは、落ち着いてファイル名と名前を1つずつ確認することが大切です。