Django MEDIA_URL 和 MEDIA_ROOT

新手上路,请多包涵

我正在尝试通过 Django 管理员上传图像,然后在前端的页面中或仅通过 URL 查看该图像。

请注意,这一切都在我的本地机器上。

我的设置如下:

 MEDIA_ROOT = '/home/dan/mysite/media/'

MEDIA_URL = '/media/'

我已将 upload_to 参数设置为“图像”,文件已正确上传到目录:

 '/home/dan/mysite/media/images/myimage.png'

但是,当我尝试通过以下 URL 访问图像时:

 http://127.0.0.1:8000/media/images/myimage.png

我收到 404 错误。

我是否需要为上传的媒体设置特定的 URLconf 模式?

任何建议表示赞赏。

谢谢。

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 545
2 个回答

更新 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 提供静态媒体,但是您可以让您的 Web 服务器配置在您进入生产和 DEBUG = False

原文由 Micah Carrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

请仔细阅读官方 Django DOC,你会找到最合适的答案。

解决这个问题的最好和最简单的方法如下。

 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)

原文由 JChen___ 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题