Breaking News

Default Placeholder Default Placeholder

Djangoには projectapp の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作成〜画面表示までの手順でした。

最後までお読みいただきありがとうございました。