目的
- Django で簡単なアプリを作成
- 作成したアプリをローカル環境で動作
前提
- OS
- macOS Sonoma 14.6
- 各バージョン
- python 3.12
- Django 5.1.3
準備
プロジェクトを作成
django-admin startproject {プロジェクト名}
# 例)「sampleProject」というプロジェクトを作成
django-admin startproject sampleProject
アプリを作成
cd {プロジェクトのディレクトリ}
python manage.py startapp {アプリ名}
# 例)「sampleProject」のプロジェクトに「sampleApp」のアプリを作成
cd sampleProject
python manage.py startapp sampleApp
ローカルサーバー起動
python manage.py runserver
実装
ルーティングを定義
アプリごとにルーティングを定義するため、各アプリのディレクトリ配下にurls.py
という新規ファイルを作成
# sampleProject/sampleApp/urls.py
from django.urls import path
from . import views
app_name = 'sampleApp'
urlpatterns = [
path('', 'views.index', name = 'index'),
...
]
-
app_name
にはアプリ名を代入する -
path()
でURLと関数を対応づける。引数は以下の通り- 第一引数:URL
- 第二引数:呼び出したい関数(ビュークラス)
- 第三引数:ルート名
アプリごとに定義したルーティングをプロジェクトのディレクトリ配下にあるurls.py
へ追加することで、プロジェクト全体にルーティングを反映
# sampleProject/sampleProject/urls.py
...
# 「include」を追加
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# アプリごとにルーティングを追加
path('sampleApp/', include('sampleApp.urls')),
...
]
上記の定義をすることで、「sampleApp」で呼び出す関数に対応するURLの先頭に「sampleApp」の文字列が必須となる
ビュークラスを作成
sampleProject/sampleApp/urls.py
で定義したルーティングで呼び出したい関数(ビュークラス)を作成
例として、今回は IndexView クラスを作成
# sampleProject/sampleApp/views.py
from django.shortcuts import render
from django.views import View
class IndexView(View):
def get(self, request):
return render(request, 'sampleApp/index.html')
index = IndexView.as_view()
- IndexView クラスは View クラスを継承
-
render()
の第二引数は画面表示(返却)したい HTML ファイルを指定 -
as_view()
によって IndexView クラスを関数に変換- 今回は
urls.py
でpath()
の第二引数にviews.index
と指定したため、変数名をindex
と定義
- 今回は
テンプレートを作成
ビュークラスの戻り値で指定したテンプレートファイルを作成
# sampleProject/templates/sampleApp/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>sampleProject</title>
</head>
<body>
<h1>sampleApp</h1>
</body>
</html>
テンプレートファイルに対する設定を追加
# sampleProject/sampleProject/settings.py
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# テンプレートファイルを格納するディレクトリパスを指定
'DIRS': [BASE_DIR / 'templates'],
...
# 日本語対応設定
LANGUAGE_CODE = 'ja'
# 日本のタイムゾーン設定
TIME_ZONE = 'Asia/Tokyo'
...
動作確認
以下の URL にアクセス
http://127.0.0.1:8000/sampleApp