我在本地服务器上运行,当我在浏览器中转到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)
1 回答
正如Alasdair的评论中所述,这是Django的正常行为 . 如果您访问完整的文件路径,如
127.0.0.1/media/file.jpg
,Django将呈现该文件而不是引发404错误 .Why is this happening?
如果查看提供媒体/静态文件的视图的source,您将找到以下行:
它的作用是,它检查所请求的路径是否是目录 . 如果是,则检查变量
show_indexes
是否为True
,然后它将返回media
目录中文件的索引 . 因为show_indexes
默认为False
,所以它会提高404 .要将
show_indexes
设置为True
,您可以这样做:这不会引发404并将在
media
dir中显示文件列表 .P.S . :我不认为显示文件索引是个好主意,当然,除非你真正想要的东西 . 它使服务器处于额外负载以生成索引 . 有人可以使用像wget等程序递归下载文件 . 甚至那些本应是私有的文件 .