目次
問題
urls.pyの書き換え
pythonのDjangoフレームワークで、
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
開発時は上記のようデバッグモードになっているところを、
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
と書き換えるとデバッグモードが解除されます。
解除されることによりWebサービス(アプリ)上でエラーが起きてもその詳細な内容がブラウザ上に吐き出されなくなるようです(セキュリティ上はこちらが良いですよね)。
デバッグモードでは下記のような表示だったサイトが、
デバッグモード解除(DEBUG=False)にしたとたんに、下記のようになってしまいました。どうもCSSとFaviconを読み込んでいないようです。どちらも”アプリフォルダの”staticフォルダに入っていたものです。
解決方法
もともと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行目を追記しました。
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