1. ホーム
  2. ジャンゴ

[解決済み】Django MEDIA_URL と MEDIA_ROOT

2022-04-15 08:06:04

質問

Django の管理画面から画像をアップロードし、その画像をフロントエンドのページか URL 経由で表示しようとしています。

これはすべて私のローカルマシン上で行われていることに注意してください。

私の設定は以下の通りです。

MEDIA_ROOT = '/home/dan/mysite/media/'

MEDIA_URL = '/media/'

upload_to パラメータを 'images' に設定したところ、ファイルがディレクトリに正しくアップロードされました。

'/home/dan/mysite/media/images/myimage.png'

しかし、以下のURLで画像にアクセスしようとすると。

http://127.0.0.1:8000/media/images/myimage.png

404エラーが発生します。

アップロードされたメディアに対して、特定のURLconfパターンを設定する必要があるのでしょうか?

何かアドバイスがあればお願いします。

ありがとうございます。

解決方法は?

Django >=1.7用のUPDATEです。

Django 2.1 のドキュメントによる。 開発中にユーザがアップロードしたファイルを提供する

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

はもう必要ありません。 if settings.DEBUG Django はこれが Debug モードでだけ使われるように処理するからです。


Django <= 1.6に対するORIGINALアンサー

これを urls.py

from django.conf import settings

# ... your normal urlpatterns here

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))

これを使うと、Django から静的メディアを提供する際に DEBUG = True (ローカルコンピュータで実行する場合) しかし、本番環境ではWebサーバの設定に静的メディアを提供させることができます。 DEBUG = False