2017-07-12 76 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上傳用戶上傳的媒體文件。

這不適合生產使用!對於一些常見的部署策略,請參閱部署靜態文件。

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 /媒體/ image.jpg'。 – Alasdair

回答

0

如上評論中指出:

例如,如果你的MEDIA_URL被定義爲/ media /,您可以通過添加下面的代碼片段到你的urls.py做到這一點通過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.")) 

它所做的是,它會檢查請求的路徑是一個目錄或不。如果是,那麼它檢查變量show_indexes是否爲True,然後它將返回media目錄內的文件的索引。因爲,show_indexesFalse在默認情況下,它提出了404

要設置show_indexesTrue,你可以這樣做:

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等程序遞歸下載文件,即使是那些意味着是私有的文件。