iXIT株式会社 小長谷です。
DjangoはWebアプリの各種設定情報を管理するための仕組みとして、「プロジェクト」を使用します。さらに「プロジェクト」内で、Webアプリのためのモジュールを作成します。
1つのアプリケーションに対し1つのフォルダが作成されるため、複数のアプリケーションを作成する場合管理がしづらいと考え、新たにappsフォルダを作成してまとめる構成で開発を行いました。
また、ビュー用のtemplateファイルもtemplatesフォルダに、その他静的ファイルもstaticフォルダにまとめました。
開発時にsettings.pyに追加するものなど、つまずいた箇所を記載していきます。
バージョン
プロジェクト、アプリケーションを作成
プロジェクト名を仮に、bookProjectという名前にします。
django-admin startproject bookProject
cd bookProject
startappコマンドでフォルダを指定する場合、予めフォルダを作成する必要があります。
mkdir -p apps/book
python manage.py startapp book apps/book
アプリケーションを追加する場合、上記のようにapps配下に作成していきます。
フォルダ構成図
templatesフォルダ、staticフォルダを作成した後の全体図は以下のようになります。
├── bookProject │ ├── __init__.py │ ├── __pycache__ │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── apps │ ├── book │ ├── __init__.py │ ├── __pycache__ │ ├── admin.py │ ├── apps.py │ ├── migrations │ ├── models.py │ ├── tests.py │ └── views.py ├── db.sqlite3 ├── manage.py ├── static │ └── css │ └── base.css └── templates ├── base.html └── book └── index.html
settings.py
bookProject/settings.py
# 追加 import os # ~~ 途中省略 ~~ INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 追加 'apps', ] # ~~ 途中省略 ~~ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ # 追加 os.path.join(BASE_DIR, 'templates'), ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] # ~~ 途中省略 ~~ STATIC_URL = '/static/' # 追加 STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
ルーティング
bookProject/urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('book/', include('apps.book.urls')), ]
bookフォルダ内にurls.pyを作成します。
apps/book/urls.py
from django.urls import path from . import views app_name = 'book' urlpatterns = [ path('', views.IndexView.as_view(), name='book_index'), ]
ビュー
apps/book/views.py
from django.shortcuts import render from django.views.generic import TemplateView class IndexView(TemplateView): template_name = 'book/index.html'
テンプレート
templates/base.html
{% load static %} <!-- 省略 --> <link rel="stylesheet" href={% static 'css/base.css' %}>
templates/book/index.html
{% extends 'base.html' %} <!-- 省略 --> <a href={% url 'book:book_index' %}>bookへ</a>