在Django开发期间提供静态媒体:为什么不MEDIA_ROOT?

我在阅读本指南时介绍了如何在开发期间使用Django提供静态媒体。 我注意到
MEDIA_URL
MEDIA_ROOT
没有用在这里。为什么?有什么不同? 我尝试用
MEDIA_URL
MEDIA_ROOT
来做,并得到了奇怪的结果。     
已邀请:
在生产环境中,您需要从前端Web服务器(Apache,Nginx等)提供媒体,以避免对Django / Python进程造成额外负担。 MEDIA_URL和MEDIA_ROOT通常用于此目的。 运行内置的开发服务器,您需要在url.py文件中设置正确的URL - 我通常使用这样的东西:
from django.conf import settings

urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
从您的设置文件中选择MEDIA_ROOT意味着它适用于开发和实时。     
直接来自settings.py中的评论...... MEDIA_ROOT
MEDIA_ROOT
是保存
/home/media/media.lawrence.com/
等媒体的目录的绝对路径。 MEDIA_URL
MEDIA_URL
是处理从
MEDIA_ROOT
提供的媒体的URL。如果存在路径组件,请确保使用尾部斜杠(在其他情况下是可选的)。示例:“http://media.lawrence.com”,“http://example.com/media/”。 所以,要改写那些......
MEDIA_ROOT
是文件在你的系统上物理存在的地方,
MEDIA_URL
是这些文件映射到的地方。在开发中,这可能并不总是可访问的,并且在大多数情况下,您的开发环境和您的生产环境是不一样的,并且您将不得不返回并进行更改。另一件事是,当Django被设计为不为您提供静态内容时,它并不是一个好的做法。 如果您打算在开发中使用它,我建议您使用将其限制为DEBUG = True的方法。当
DEBUG
设置为
True
时,告诉Django在开发时从临时位置提供静态内容是一种更好,更安全的做法。你不打算用
DEBUG
把你的网站投入生产,对吗?好吧,至少你不应该。 以下是我实现它的方法: settings.py:
STATIC_DOC_ROOT = os.path.join(os.getcwd(), 'site_media')
urls.py:
from django.conf import settings
## debug stuff to serve static media
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', 
            {'document_root': settings.STATIC_DOC_ROOT}),
   )
这样我正在处理的任何项目都有一个
site_media
目录,里面有所有必要的媒体。在dev中它是自包含的,除了
DEBUG
之外我不必在设置中翻转任何位,我将会这样做。     
Django文档推荐我为我的用例修改了以下方法:
urlpatterns = [
    # url patterns
]

from django.conf import settings

if settings.DEBUG:
    from django.conf.urls.static import static
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  注意:以上假设您已正确设置
MEDIA_URL
MEDIA_ROOT
......这是djangodocs linkslap。     

要回复问题请先登录注册