Djangoには project と app の2つの概念があります。今回はappの作成について書いていきたいと思います。
環境
- Django: 3.0
- Python: 3.6
app
appとは application の略です。
projectはappから構成されています。もちろんappのないDjangoプロジェクトも存在しますが、Djangoで開発する強みというのはこのappを複数持てるところにあるので大体のDjangoプロジェクトにはappが採用されています。
ディレクトリ構成
プロジェクト名は aegis(イージス)です。
├── Dockerfile
├── README.md
├── aegis
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── __init__.cpython-39.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── settings.cpython-39.pyc
│ │ ├── urls.cpython-36.pyc
│ │ ├── urls.cpython-39.pyc
│ │ ├── wsgi.cpython-36.pyc
│ │ └── wsgi.cpython-39.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── docker-compose.yml
├── manage.py
└── requirements.txt
app作成
では、appを作成してみましょう。
$ python manage.py startapp app
# appには任意のappの名前を入れてください
これで app ディレクトリが作成されます。
├── Dockerfile
├── README.md
├── aegis
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── __init__.cpython-39.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── settings.cpython-39.pyc
│ │ ├── urls.cpython-36.pyc
│ │ ├── urls.cpython-39.pyc
│ │ ├── wsgi.cpython-36.pyc
│ │ └── wsgi.cpython-39.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── app
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── docker-compose.yml
├── manage.py
└── requirements.txt
appのページを表示
ではapp配下にviewとテンプレートを作って画面表示してみましょう。
settings.py
新しくappを作成したのでsettings.pyの INSTALLED_APPS に追加します
diff --git a/aegis/settings.py b/aegis/settings.py
index 4a796a9..607ac11 100644
--- a/aegis/settings.py
+++ b/aegis/settings.py
@@ -37,6 +37,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'app'
]
Viewファイル
app配下のviewを管理するディレクトリviewsを作成し、その配下にviewファイルを格納します。今回は app/views/sample.pyをサンプルとして作成します。
from django.shortcuts import render
from django.views.generic.base import TemplateView
# Create your views here.
class SampleIndexView(TemplateView):
template_name = 'sample/index.html'
def get(self, request, **kwargs):
context = {}
return self.render_to_response(context)
initファイル
上で作成したviewファイルを読み込むために、init設定を行います。 app/views/__init__.pyを作成します。
from app.views.sample import *
Templateファイル
app/templates/sample/index.htmlファイルを作成します。
This is sample/index.html
app/urls.py
新規で app/urls.py を作成しRoutingの設定を行います。
# -*- coding: utf-8 -*-
from django.conf.urls import url
from app.views import *
from django.views.generic import TemplateView
urlpatterns = [
url('', SampleIndexView.as_view(), name='index'),
]
既存の aegis/urls.py の修正
上で作成した app/urls.py をインクルードするように修正します。
diff --git a/aegis/urls.py b/aegis/urls.py
index 3dbfc28..064fdbb 100644
--- a/aegis/urls.py
+++ b/aegis/urls.py
@@ -15,7 +15,8 @@ Including another URLconf
"""
from django.contrib import admin
from django.urls import path
+from django.urls import path, include
urlpatterns = [
- path('admin/', admin.site.urls),
+ path('', include('app.urls')),
]
ブラウザ表示
では localhost:8000をブラウザで叩いてみましょう。下記のような画面になれば成功です。
以上、Djangoでのapp作成〜画面表示までの手順でした。
最後までお読みいただきありがとうございました。