はじめに
Django のディレクトリ構成を変更したい方は多いかと思います
個人的に下記のようになって欲しいので、その変更方法を共有したいと思います
・JavaScript, css の static ファイルを機能(app)単位でまとめたい
・機能(app)を apps のディレクトリ配下にまとめたい
→ デフォルトでは、ルートディレクトリ直下になっているので、ごちゃっとしている…
・設定ファイル(setting.py等)関係のディレクトリ名を config に変えたい
→ デフォルトでは、サイト名になっている!
下記の環境を想定しています
- django 3.2.10
もくじ
- 目指すディレクトリ構成
- setting.py の変更
- manage.py の変更
- asgi.py の変更
- wsgi.py の変更
- 参考サイト
- GitHub
目指すディレクトリ構成
app が apps 配下にまとまりスッキリ!!
static ファイルが app ごとに納まっている!!
設定ファイルのディレクトリ名が config に!!
src
│ manage.py
├─apps
│ └─sample
│ │ __init__.py
│ │ apps.py
│ │ urls.py
│ │ views.py
│ ├─static
│ │ └─sample
│ │ ├─css
│ │ │ sample.css
│ │ └─js
│ │ sample.js
│ └─templates
│ └─sample
│ sample.html
└─config
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
setting.py の変更
下記の箇所を変更していきます。
※必要な個所のみ抜粋
# インポートを追記
+ import os
+ import sys
# ※下記より「BASE_DIR = Path(__file__).resolve().parent.parent」の記述以降に追記してください
# app を apps 配下にまとめておけるように下記を追記
+ sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
# wsgi の配置を config ディレクトリ配下にするため下記を変更
- WSGI_APPLICATION = 'mysite.wsgi.application'
+ WSGI_APPLICATION = 'config.wsgi.application'
# ルートの urls を config ディレクトリ配下にするため下記を追記
+ ROOT_URLCONF = 'config.urls' #
# static を app ごとにまとめられるように下記を追記
# 本番環境では static を一纏めにするので切替られるように分岐する
+ if DEBUG == False:
+ STATIC_ROOT = os.path.join(BASE_DIR, 'static')
manage.py の変更
下記の箇所を変更していきます。
※必要な個所のみ抜粋
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
asgi.py の変更
下記の箇所を変更していきます。
※必要な個所のみ抜粋
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
wsgi.py の変更
下記の箇所を変更していきます。
※必要な個所のみ抜粋
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
参考サイト
・[Django] プロジェクト構成のベストプラクティスを探る - 1.設定ディレクトリの名前を変更する
・Djangoプロジェクト構造のカスタマイズ(分割と構造化)
・とほほのDjango入門 (settings.py)
・【開発効率up】アプリ開発でおすすめのディレクト
GitHub
ひな形として使えるものを置いておきます
https://github.com/tsk1000/django_seed-docker
おわりに
小~中規模くらいで使った実績があります。
ぶっちゃけその規模ならどんな形になっていようが把握出来るので拘る必要ない気も…
IDEやツールのペインを慣れてる位置に変えちゃう感覚に近いかも!!