0
0

More than 1 year has passed since last update.

Djangoで本番(DEBUG=False)でCSSとFaviconが読み込めなかった件

Last updated at Posted at 2023-02-07

目次

1.問題
2.解決方法
3.振り返り
4.参考記事

問題

urls.pyの書き換え

pythonのDjangoフレームワークで、

settings.py(抜粋)
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

開発時は上記のようデバッグモードになっているところを、

settings.py(抜粋)
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

と書き換えるとデバッグモードが解除されます。
解除されることによりWebサービス(アプリ)上でエラーが起きてもその詳細な内容がブラウザ上に吐き出されなくなるようです(セキュリティ上はこちらが良いですよね)。

デバッグモードでは下記のような表示だったサイトが、
スクリーンショット 2023-02-07 22.12.20.png
デバッグモード解除(DEBUG=False)にしたとたんに、下記のようになってしまいました。どうもCSSとFaviconを読み込んでいないようです。どちらも”アプリフォルダの”staticフォルダに入っていたものです。
スクリーンショット 2023-02-07 22.13.35.png

解決方法

もともとurls.pyは下記のようになっていましたが、

urls.py
mysite URL Configuration
from django.contrib import admin
from django.urls import path, include, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

下記のように書き換えました。
settings.py, serveのimportをしました。
それとurlpatternsのところ、3行目を追記しました。

urls.py
from django.contrib import admin
from django.urls import path, include, re_path

from django.conf import settings
from django.views.static import serve 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
    re_path(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}), 
]

staticフォルダをプロジェクトフォルダ直下へ追加して解決

アプリケーションフォルダの下にstaticフォルダ(中にcss, iconフォルダ)があり、デバッグモードの環境ではそこを見に行ってくれていたのですが、プロジェクトフォルダ直下、manage.pyと同じ階層にstaticフォルダ(アプリフォルダのものと同じ構成)を追加しました。

これで解決しました。

振り返り

Djangoフレームワークではプロジェクトがあってその下に複数のアプリケーションをぶら下げることができる構造になっていて、フォルダの構造も同様になっていますよね。デバッグモード(開発環境)上では、各アプリのstaticフォルダの下にcssやiconを入れればそれが各アプリ上で反映されるという形ですが、本番環境ではmanage.pyと同じ階層(プロジェクトフォルダ直下)にstaticフォルダがまとめられる、ということですね、多分。学び多し…。

参考記事

https://qiita.com/kimisyo/items/0a67f129904a427cf92d
https://qiita.com/usodamasijp/items/2d5e9040548f7b52f5e8

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0