こんにちは。sinyです。
本記事では、Djangoの本番環境でメディアファイルを公開する際に必要な設定についてまとめました。
チュートリアル等では開発環境前提(DEBUG=True)なので特に問題ないのですが、DEBUG=Falseに設定されている本番環境でリリースすると「メディアファイルのURLが参照できない!」となるケースがあると思います。
前提
以下のようにメディアファイルの基本設定は実施済みとします。
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
通常の開発環境ではDEBUG=Trueになっていますが、例えばMEDIA_ROOTに設定したフォルダ配下にあるファイルの一覧をWEB画面に表示させたいようなケースでは、プロジェクト直下のurls.pyに以下のような設定を追加することでMEDIA_ROOTに存在するファイルをMEDIA_URL(http://<サーバ名>/media/xx/<ファイル名>)にアクセスすることで参照することができます。
urls.py
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ ~省略~ ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
そして、開発環境と同じ設定でDEBUG=Falseになっている本番環境にリリースすると、以下のようなエラーでMEDIA_ROOTに設定したURLにアクセスすることができません。
DEBUG=Falseの環境で必要なメディアファイル公開の設定
DEBUG=Falseの環境では、プロジェクト直下のurls.pyに以下の設定を行うことでメディアファイルを参照することができるようになります。
(実際にこの問題に遭遇して以下の設定で回避することができましたが、もっと良いやり方や推奨のやり方等知っている方いたらご指摘いただけると幸いです。)
from django.conf import settings from django.conf.urls.static import static from django.views.static import serve #追加 urlpatterns = [ ~省略~ url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), #追加 ]
以上、「Django本番環境でメディアファイル公開に必要な設定」でした。