Djangoの静的ファイル設定について (STATIC_URL
, STATICFILES_DIRS
, STATIC_ROOT
)
Django における STATIC_URL
, STATICFILES_DIRS
, STATIC_ROOT
の役割がよく分からなかったため、内容をまとめます。
1. STATIC_URL
STATIC_URL
は、静的ファイルへの URLパスのプレフィックス を指定します。
目的
- ブラウザが静的ファイル(CSS, JS, 画像など)を取得するためのURLを定義します。
- 必ずURL形式で指定します(例:
/static/
)。
設定例
STATIC_URL = '/static/'
2. STATICFILES_DIRS
目的
-
STATICFILES_DIRS は、開発環境で Django が静的ファイルを探すディレクトリを指定するものです。
-
開発サーバーが静的ファイルを提供する際、どのディレクトリからファイルを探すか指定します。
複数のディレクトリをリスト形式で指定できます。
設定例
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # プロジェクト全体の静的ファイル
os.path.join(BASE_DIR, 'application/static'), # アプリ固有の静的ファイル
]
ディレクトリ構造の例
project/
├── static/
│ ├── css/
│ │ ├── style.css
│ ├── js/
│ │ ├── script.js
├── application/
│ ├── static/
│ │ ├── images/
│ │ │ ├── logo.png
3. STATIC_ROOT
目的
STATIC_ROOT は、本番環境で collectstatic コマンドによって、すべての静的ファイルが収集されるディレクトリを指定します。
- 本番環境で Nginx や Apache などの Web サーバーが、静的ファイルを1箇所にまとめて提供するために使用します。
設定例
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
ディレクトリ構造(collectstatic 実行後)
project/
├── staticfiles/
│ ├── css/
│ │ ├── style.css
│ ├── js/
│ │ ├── script.js
│ ├── images/
│ │ ├── logo.png
Nginx 設定例
location /static/ {
root /path/to/project/staticfiles;
}
動作の流れ
1. 開発環境
- Django の開発サーバー(python manage.py runserver)は、STATICFILES_DIRS に指定されたディレクトリから直接静的ファイルを提供します。
2. 本番環境
- collectstatic を実行すると、すべての静的ファイルが STATIC_ROOT にまとめられます。
- Web サーバー(Nginx や Apache)が STATIC_ROOT にあるファイルを提供します。
本番環境では Django 自体が静的ファイルを提供しません。
まとめ
-
開発環境ではSTATICFILES_DIRS を使って静的ファイルを直接提供する。
-
本番環境ではcollectstaticを用いて静的ファイルを集め、STATIC_ROOT を使用して静的ファイルを間接的に提供する。