Django的MEDIA_URL和MEDIA_ROOT
我正在尝试通过Django的管理后台上传一张图片,然后想在前端的某个页面上查看这张图片,或者直接通过一个网址来访问它。
请注意,这一切都是在我的本地电脑上进行的。
我的设置如下:
MEDIA_ROOT = '/home/dan/mysite/media/'
MEDIA_URL = '/media/'
我把上传的文件设置为放在'images'这个文件夹里,文件也确实成功上传到了这个目录:
'/home/dan/mysite/media/images/myimage.png'
但是,当我尝试通过以下网址访问这张图片时:
http://127.0.0.1:8000/media/images/myimage.png
我遇到了404错误。
我需要为上传的媒体文件设置特定的URL配置吗?
任何建议都非常感谢。
谢谢。
17 个回答
78
对于Django 1.9,你需要按照文档添加以下代码:
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.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development
118
请仔细阅读官方的Django文档,你会找到最合适的答案。
解决这个问题最简单的方法如下。
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
372
更新适用于 Django 版本 >= 1.7
根据 Django 2.1 的文档:在开发过程中提供用户上传的文件
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
你不再需要 if settings.DEBUG
这段代码,因为 Django 会自动确保这只在调试模式下使用。
原始答案适用于 Django 版本 <= 1.6
试着把这个放到你的 urls.py 文件里
from django.conf import settings
# ... your normal urlpatterns here
if settings.DEBUG:
# static files (images, css, javascript, etc.)
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
这样你就可以在 DEBUG = True
的情况下(也就是在本地电脑上运行时)从 Django 提供静态媒体文件,但当你上线并且 DEBUG = False
时,可以让你的网页服务器配置来提供静态媒体文件。