学習目標
前回は、Djangoのインストールとプロジェクトの作成、開発サーバーの起動までを行いました。
今回は、DjangoでWebページが表示されるまでの流れを学習します。

この章では、以下の2つのページを作成します。
- トップページ
- Aboutページ
難しい処理はまだ行いません。URLへアクセスするとHTMLが表示されるという、Djangoの基本的な流れを理解することが目的です。
URLとは
URLとは、ブラウザからアクセスする住所のようなものです。例えば、http://127.0.0.1:8000/ の 127.0.0.1 は自分のコンピューターを表すIPアドレスで、localhost と書いても同じ意味になります。
また、8000 はポート番号と呼ばれ、コンピューター上で動作しているWebアプリを識別するための番号です。そのため、http://127.0.0.1:8000/ へアクセスするとトップページが表示され、http://127.0.0.1:8000/about/ へアクセスするとAboutページを表示する、といった設定ができます。
Djangoでは、「どのURLにアクセスされたら、どの処理を実行するか」をURL設定で管理しており、URLと処理を結び付ける役割を担っています。
DjangoのProjectとApp
Djangoでは、Webアプリケーションを**Project(プロジェクト)とApp(アプリ)**という2つの単位に分けて管理します。
ProjectはWebアプリ全体を管理する大きな入れ物で、設定ファイルやURL設定など、アプリ全体に関わる機能をまとめています。
一方、Appは一つひとつの機能を担当する部品です。例えば、ブログ機能、会員管理機能、商品管理機能などを、それぞれ別のAppとして作成できます。
最初は違いが分かりにくいかもしれませんが、「Projectはアプリ全体を管理する本体」「Appは特定の機能を実装する部品」と考えると理解しやすいでしょう。Djangoでは、このように機能ごとにAppを分けることで、見通しがよく、再利用しやすいWebアプリを開発できます。
Projectとは
Projectは、Webアプリケーション全体を管理する単位です。例えば、ショッピングサイトでは「商品管理」「会員管理」「注文管理」など、さまざまな機能がありますが、それらをまとめて管理するのがProjectの役割です。
Projectには、アプリ全体で共通して使用する設定やURLの管理などが含まれます。前回作成したプロジェクトでは、configがProject名にあたります。
configディレクトリには、settings.pyやurls.pyなど、Webアプリ全体の動作を決める重要なファイルがまとめられており、各Appを管理・連携させる中心的な役割を担っています。
django-admin startproject config .
上記のconfigがProjectになります。Djangoプロジェクトを作成した直後(django-admin startproject config . のようにカレントディレクトリに作成した場合)の一般的なディレクトリ構成は以下のようになります。
project/
├── manage.py
├── config/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── (その他のファイル)
各ファイルの役割は次のとおりです。
| ファイル | 役割 |
|---|---|
| manage.py | Djangoの管理コマンドを実行するためのファイル |
| config/init.py | Pythonパッケージであることを示すファイル |
| config/settings.py | プロジェクト全体の設定ファイル |
| config/urls.py | URLのルーティング設定 |
| config/asgi.py | ASGIサーバー用の設定 |
| config/wsgi.py | WSGIサーバー用の設定 |
Projectには、Webアプリケーション全体の設定やURL設定などが保存されています。ただし、これだけではWebアプリは作れない
この状態は「プロジェクト」だけが作成された状態です。Djangoでは、実際のWebアプリはアプリケーション(App)という単位で作成します。
Appとは
Appは、Webアプリケーションの中で一つの機能をまとめた単位です。例えば、ブログ機能、お問い合わせ機能、会員管理機能など、それぞれを独立したAppとして作成できます。
新しいAppは、python manage.py startapp blog のように startapp コマンドを実行して作成します。この例では blog という名前のAppが作成され、その中には models.py、views.py、admin.py など、Webアプリを開発するために必要なファイルが自動的に用意されます。
Djangoでは、機能ごとにAppを分けて開発することで、プログラムの役割が明確になり、保守や機能追加がしやすい構成になっています。次に、startapp を実行すると作成されるディレクトリ構成と、それぞれのファイルの役割を確認していきましょう。
project/
├── manage.py
├── config/
│ ├── settings.py
│ ├── urls.py
│ └── ...
└── blog/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
一つのProjectの中に複数のAppを作成できるため、大規模なシステムでも管理しやすくなっています。
今回は、ページ表示だけを学習するため、Projectに用意されている機能を利用して進めます。Appの作成方法については次回以降に学習します。
Viewとは
DjangoのViewとは、ブラウザからURLへアクセスされたときに実行される処理を記述する場所です。利用者がWebページを開くと、まずURLに対応するViewが呼び出され、そのViewが必要な処理を実行してブラウザへ返す画面を決定します。例えば、データベースからデータを取得したり、Templateへデータを渡したりする処理はViewで行います。
今回は、複雑な処理は行わず、HTMLを表示するだけの基本的なViewを作成します。例えば、トップページを表示するViewやAboutページを表示するViewのように、ページごとにViewを用意します。
Viewは「どのページを表示するか」を決める役割を持っており、実装ではurls.pyでURLとViewを結び付け、views.pyで実際の処理を記述します。この2つのファイルを組み合わせることで、ブラウザからのアクセスに応じて適切なページを表示できるようになります。
urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("admin/", admin.site.urls),
path("", views.index),
path("about/", views.about),
]
views.py
from django.shortcuts import render
def index(request):
return render(request, "index.html")
def about(request):
return render(request, "about.html")
Templateとは
DjangoのTemplateとは、ブラウザに表示する画面を作成するためのHTMLファイルです。Webアプリでは、利用者が目にする文字や画像、ボタンなどの画面レイアウトをTemplateに記述します。
つまり、「画面に何をどのように表示するか」を定義する場所がTemplateです。
例えば、トップページを表示する場合は <h1>トップページ</h1>、Aboutページを表示する場合は <h1>Aboutページ</h1> のようなHTMLを作成します。Djangoでは、このTemplateをViewと組み合わせて使用することで、Pythonで処理したデータを画面へ表示する動的なWebページを作成できます。
templates/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>トップページ</title>
</head>
<body>
<h1>トップページ</h1>
</body>
</html>
templates/about.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Aboutページ</title>
</head>
<body>
<h1>Aboutページ</h1>
</body>
</html>
ブラウザでは http://127.0.0.1:8000/ にアクセスするとindex.htmlにアクセスできます。aboutページは http://127.0.0.1:8000/about でアクセスします。URLが変わるだけで、別のViewが実行され、別のTemplateが表示されることを確認してください。ViewはTemplateを呼び出し、Templateがブラウザへ表示されます。
Djangoでページが表示される流れ
ここまで学習した内容をまとめると、ブラウザへページが表示される流れは次のようになります。
- ブラウザからURLへアクセスする
- DjangoがURLを確認する
- 対応するViewが実行される
- ViewがTemplate(HTML)を表示する
- HTMLがブラウザへ表示される
例えばAboutページなら、
ブラウザ
↓
http://127.0.0.1:8000/about/
↓
URL
↓
View
↓
Template
↓
ブラウザへ表示
という順番で処理が進みます。
この流れがDjangoの最も基本となる仕組みです。
まとめ
今回は、Djangoでページが表示される基本的な仕組みを学習しました。
ProjectはWebアプリケーション全体を管理する役割を持ち、Appは機能ごとに処理を分けて管理する単位です。URLはアクセス先と処理を結び付け、Viewで必要な処理を実行します。最後にTemplateでHTMLを表示し、ページは「URL → View → Template」の流れで表示されます。
この流れは、今後DjangoでWebアプリケーションを開発するうえで何度も登場する重要な仕組みです。まずは、URLによって実行されるViewが変わり、それぞれのTemplateがブラウザに表示されるという流れを理解しておきましょう。