【Django】本番環境でメディアファイル(画像/アップロードファイル)を公開するために必要な設定

スポンサードリンク



Django · Production Setup · メディアファイル公開

番環境で Django アプリの「画像アップロード」「ユーザー投稿ファイル」等が表示されない、という事故は MEDIA_URL / MEDIA_ROOT の設定漏れと、本番では django.views.static.serve が動かないこと が主な原因です。本記事では、開発環境で動いていた MEDIA 配信を本番(Nginx / Apache / IIS 等)で正しく公開するために必要な設定を整理します。

本記事では、Djangoの本番環境でメディアファイルを公開する際に必要な設定についてまとめました。

チュートリアル等では開発環境前提(DEBUG=True)なので特に問題ないのですが、DEBUG=Falseに設定されている本番環境でリリースすると「メディアファイルのURLが参照できない!」となるケースがあると思います。

user@sinyblog:~/article 01_section_1.md前提

以下のようにメディアファイルの基本設定は実施済みとします。

settings.py

python


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

python


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にアクセスすることができません。

user@sinyblog:~/article 02_debug_false.mdDEBUG=Falseの環境で必要なメディアファイル公開の設定

DEBUG=Falseの環境では、プロジェクト直下のurls.pyに以下の設定を行うことでメディアファイルを参照することができるようになります。

(実際にこの問題に遭遇して以下の設定で回避することができましたが、もっと良いやり方や推奨のやり方等知っている方いたらご指摘いただけると幸いです。)

python


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本番環境でメディアファイル公開に必要な設定」でした。

 

おすすめの記事