【问题标题】:MEDIA_URL Page 404 Error DjangoMEDIA_URL 页面 404 错误 Django
【发布时间】:2017-12-17 06:00:15
【问题描述】:

我在本地服务器上运行,当我在浏览器中转到 http://127.0.0.1:8000/media/ 时,它显示找不到页面。

设置:

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

根网址:

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 定义为 /media/,您可以通过将以下 sn-p 添加到您的 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/

【问题讨论】:

  • http://127.0.0.1:8000/media/ 的 404 不是问题。您需要尝试查看媒体文件,例如http://127.0.0.1:8000/media/image.jpg.

标签: django python-3.x


【解决方案1】:

正如上面Alasdair 在 cmets 中指出的那样,这是 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_indexes默认是False,所以它会引发404。

要将show_indexes 设置为True,您可以这样做:

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

这不会引发 404,而是会在 media 目录中显示文件列表。


P.S.:我不认为显示文件索引是一个好主意,当然,除非这是你真正想要的。它使服务器承受额外的负载以生成索引。并且有人可以使用 wget 等程序递归下载文件。即使是那些本来是私有的文件。

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2021-11-03
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多