djangoで開発を行っています。
Dockerで開発を行うにあたっては
こちら
のように勉強を始めました。
Docker関係ないとこですが、staticfilesの扱い方を忘れていて「あれー?」となったのでメモ。
ディレクトリ構造については上記リンク記事をそのまま使っていますので参照してください。
現状
ENTRYPOINT [ "/usr/src/app/entrypoint.sh" ]
でコンテナの起動時に以下が実行されるように書いてあります。
python manage.py flush --no-input python manage.py migrate python manage.py collectstatic --no-input --clear
当然コンテナ起動のたびにcollectstaticを実行してくれます。
うまくスタイルファイルがcollectされなかったので、手動でapp/staticfiles/下にapp_name/style.cssなどとファイルを追加したのですが、
"GET /staticfiles/app_name/style.css HTTP/1.1" 404
と、404エラー。
collectstaticのコマンドで集めたstaticfilesしかパスとして扱ってくれないみたいです。
ではそもそも集める対象にしてもらうにはどうすればいいか調べました。
settings.pyの中で
STATIC_URL = '/staticfiles/' STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
とデフォルトのstaticではなくstaticfilesという名前を使うよと言ってあったんですが、各アプリ内ではやはりstaticじゃないとダメみたいです。
ディレクトリ名をapp_name/staticfilesをapp_name/staticに変えると、その下にあるstyle.cssを拾ってくれました。
また、そのままだとapp/staticfiles/style.cssと直下にファイルがコピーされて気持ち悪いので、公式チュートリアルのtemplateでやってように、app_name/static/app_name/style.cssと一見冗長に見える構成にします。
以上まとめると解決法は
staticfiles -> staticに改名
でした。
また、アプリ内で直でstyle.cssを配置するとstatic/style.cssに直で作られるので、static/app_name/style.cssとするのも忘れずに