真正的问题是此URLhttp://localhost:8000/media/eventbanner/1/banner_image.jpg
与磁盘上的此位置之间没有关系/home/username/xxx/xxx/project_name/media
。
在生产应用程序中,您将有一个用于存储Media
内容的Web服务器,服务URL将是MEDIA_ROOT
并且您将附加ImageField.url
到该值以获取有效的图像路径。
这里您需要为媒体图像设置一个Web服务器。乍一看,这需要做很多工作,但是Django提供了一个快捷方式…
您需要做一些工作才能使媒体文件在本地提供。它需要对您的urls.py
…进行一些更改。
from django.conf import settings
from django.views.static import serve
# ... the rest of your URLconf goes here ...
if settings.DEBUG:
urlpatterns += [
url(r'^media/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT,
}),
]
这使用该views.serve
位,并且仅应在DEBUG
模式下使用。它会覆盖媒体文件的路径(django是用户上传的内容之类的术语ImageField
)。这将通过serve
视图重定向这些请求。最好的说这是一个微型Web服务器,它将把这些请求路由映射到磁盘上的位置,并允许通过HTTP url访问这些位置。