概要
DjangoでCSSの読み込みがされない現象が発生しましたので、その原因と解決方法を記載します。バージョンは、Django 3.0.5を使っています。
結論、DjangoのバージョンによってSTATIC_URL
の書き方が異なる、ということでした。
STATIC_URL = 'static/'
の場合:
以下は/admin
を叩いた場合です。
見ての通り、CSSが反映されていません。
ログには以下のようにCSS読み込みエラーが出ていました。
Not Found: /admin/static/admin/css/base.css
Not Found: /admin/static/admin/css/responsive.css
[01/Nov/2023 13:31:24] "GET /admin/static/admin/css/base.css HTTP/1.1" 404 4927
Not Found: /admin/static/admin/css/dashboard.css
[01/Nov/2023 13:31:24] "GET /admin/static/admin/css/responsive.css HTTP/1.1" 404 4945
[01/Nov/2023 13:31:24] "GET /admin/static/admin/css/dashboard.css HTTP/1.1" 404 4942
もちろん、ルートを叩いても同じです。
以下のように出ました。
Not Found: /static/polls/style.css
STATIC_URL = '/static/'
の場合:
わずかな変化ですが、'/static/'
というように/
を頭につけてあげると、CSSが反映されました。
原因はバージョンだった
調べてみると、
古いDjangoのバージョン='/static/'
新しいDjangoのバージョン='static/'
とのこと。
以下の記事にもこのように書いてありました。
古いバージョンの Django の場合、STATIC_URL = '/static/' と定義されている可能性があります
このように STATIC_URL が定義されている場合、以降の解説は、/STATIC_URL を STATIC_URL に置き換えて読んでいただければ話が合うはずです
引用元:【Django】静的ファイルの扱い方(画像・CSS・JS)
今回、自分はDjango4.1で作ったDjangoチュートリアルのアプリを、
既存で使っていたDjangoアプリケーション(3.0.5)のsettings.py
と混ぜて使ってしまっていました。
そのため、このようにバージョン違いによるエラーが発生してしまったのです。
たった一つの/
で解決しました。。。