はじめに
CORESERVER V2でDjango 6.0 を CGI で動かし、ロケット(The install worked successfully!)が表示されたあと、管理画面を開くとレイアウトが崩れる現象に遭遇しました。
本記事ではその原因と解決方法をまとめ、CORESERVER V2でDjangoサイトを作ったとき、静的ファイルを配信する方法を見ていきます。
Django管理画面
http://django.tomomori.net/cgi-bin/django.cgi/admin/ にアクセスすると、下記のようにCSSが適用されていないDjango管理画面が表示されました。

原因は「staticファイルが配信されていない」
管理画面が崩れる原因はほぼ確実にこれです。
これが 404 になっている場合、
Djangoの静的ファイルがWebサーバから配信できていません。
なぜ起きるのか?
CGI構成はこうなっています。
public_html/
├── cgi-bin/django.cgi ← Django本体
└── (staticが無い)
一方、collectstatic後は下記ディレクトリに静的ファイルが集められています。
/apps/django.tomomori.net/staticfiles/
問題は、
Webサーバは public_html 配下しか読めない
という点です。/apps/... は公開領域ではないため、ApacheはCSSを読めません。
settings.py の設定を変更し collectstatic を実行する
まずやること:settings.py 修正
settings.pyをエディタで開き、STATIC_URLとSTATIC_ROOTを下記のように修正します。(なければ追加)settings.pyの場所は、わたしの場合は~/apps/django/config/settings.pyです。
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_URL = "/static/"
STATIC_ROOT = BASE_DIR / "staticfiles"
collectstatic を実行する
cd ~/apps/django
source venv/bin/activate
python manage.py collectstatic
成功すると下記のように表示されます。
130 static files copied to '/home/xxx/apps/django/staticfiles'
public_html に static を作る
わたしの環境では、
/domains/django.tomomori.net/public_html/
が公開ディレクトリでした。
シンボリックリンク
そこで、下記のようにシンボリックリンクでstaticを作成します。
ln -s /home/xxx/apps/django/staticfiles \
/home/xxx/domains/django.tomomori.net/public_html/static
すると、下記が表示されるようになりました。
https://django.tomomori.net/static/admin/css/base.css
Django管理画面にアクセスする
これで、Django管理画面のCSSも表示できるようになっています。
https://django.tomomori.net/cgi-bin/django.cgi/admin/

.htaccess では解決しない理由
よく「.htaccessでなんとかできないか?」と考えますが、
- .htaccessはURL書き換え
- /apps はWeb公開外
- 共有サーバではAlias設定不可
つまり、
物理的に public_html に置くしかない
のです。そのため、シンボリックリンクで public_html/static を作成しました。
まとめ
管理画面が崩れたら確認すること:
- STATIC_URL が
/static/になっているか - STATIC_ROOT が設定されているか
- collectstatic を実行したか
- public_html に static を置いたか
/static/admin/css/base.cssが200か
ここまでやれば必ず直ります。
この記事が、どなたかのお役に立てば幸いです。



コメント