2017-07-12 32 views
0

ローカルサーバー上で実行していますが、私のブラウザでhttp://127.0.0.1:8000/media/に行くと、ページが見つかりません。MEDIA_URL Page 404エラーDjango

セッティング:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 
STATIC_URL = '/static/' 

ルートURL:ユーザーのアップロードのための

from django.conf.urls import url, include 
from django.contrib import admin 

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

urlpatterns = [ 
    url(r'^polls/', include('mysite.polls.urls')), 
    url(r'^admin/', admin.site.urls), 
    url(r'^submit/', include('mysite.uploads.urls')), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

がモデル:

from django.db import models 
class Document(models.Model): 
    description = models.CharField(max_length=255, blank=True) 
    document = models.FileField(upload_to='documents/') 
    uploaded_at = models.DateTimeField(auto_now_add=True) 

Djangoのドキュメント以下:によってアップロードされたファイルをサービング

開発中のユーザー

開発中に、django.contrib.staticfiles.views.serve()ビューを使用してMEDIA_ROOTからユーザーがアップロードしたメディアファイルを提供できます。

これはプロダクションでは使用できません。一般的な展開方法については、「静的ファイルの展開」を参照してください。あなたのMEDIA_URLがメディア/ /として定義されている場合たとえば、あなたがあなたのurls.pyに次のコードを追加することでこれを行うことができます

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

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

https://docs.djangoproject.com/en/1.10/howto/static-files/

+1

「http://127.0.0.1:8000/media /」の404は問題ありません。メディアファイルを表示する必要があります。 'http://127.0.0.1:8000/media/image.jpg'。 – Alasdair

答えて

0

コメントして先に指摘したようにAlasdairによって、これはDjangoの通常の動作です。 127.0.0.1/media/file.jpgのような完全なファイルパスにアクセスすると、Djangoは404エラーを発生させる代わりにファイルをレンダリングします。

どうしてですか?

あなたがメディア/静的ファイルを提供していますビューのsourceを見れば、あなたはこれらの行見つける:要求されたパスがディレクトリであればそれは、それはチェックしない何

if os.path.isdir(fullpath): 
    if show_indexes: 
     return directory_index(newpath, fullpath) 
    raise Http404(_("Directory indexes are not allowed here.")) 

をか否か。 yesの場合、変数show_indexesTrueであるかどうかを確認し、mediaディレクトリ内のファイルのインデックスを返します。 show_indexesは、それがTrueshow_indexesを設定するには404

を発生させ、あなたがこれを行うことができ、デフォルトでFalseです、ので:

urlpatterns = [ 
    # ... the rest of your URLconf goes here ... 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT, show_indexes=True) 

これは404を上げないであろうとmedia内のファイルの一覧を表示します。 dir。


P.S:私は、もちろん、それはあなたが本当に欲しい何か、しない限り、ファイルのインデックスを表示することは、良いアイデアだとは思いません。それはインデックスを生成するためにサーバーを余分な負荷の下に置きます。誰かがwgetなどのプログラムを使ってファイルを再帰的にダウンロードすることができます。