首页 文章

MEDIA_URL页面404错误Django

提问于
浏览
0

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

设置:

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定义为/ media /,则可以通过将以下代码段添加到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 回答

  • 0

    正如Alasdair的评论中所述,这是Django的正常行为 . 如果您访问完整的文件路径,如 127.0.0.1/media/file.jpg ,Django将呈现该文件而不是引发404错误 .

    Why is this happening?

    如果查看提供媒体/静态文件的视图的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 dir中显示文件列表 .


    P.S . :我不认为显示文件索引是个好主意,当然,除非你真正想要的东西 . 它使服务器处于额外负载以生成索引 . 有人可以使用像wget等程序递归下载文件 . 甚至那些本应是私有的文件 .

相关问题