我阅读了这篇关于在开发过程中使用 Django 提供静态媒体的指南。
我注意到了这一点MEDIA_URL
,并MEDIA_ROOT
没有在其中使用。为什么?有什么不同?
MEDIA_URL
我试着用and来做MEDIA_ROOT
,结果很奇怪。
我阅读了这篇关于在开发过程中使用 Django 提供静态媒体的指南。
我注意到了这一点MEDIA_URL
,并MEDIA_ROOT
没有在其中使用。为什么?有什么不同?
MEDIA_URL
我试着用and来做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
绝对路径,例如/home/media/media.lawrence.com/
.
MEDIA_URL
是处理从 提供的媒体的URL MEDIA_ROOT
。如果有路径组件,请确保使用尾部斜杠(在其他情况下可选)。示例:“ http://media.lawrence.com ”、“ http://example.com/media/ ”。
所以,要改写那些... 这MEDIA_ROOT
是文件在您的系统上实际存在的位置,并且MEDIA_URL
是这些文件映射到的位置。在开发中,这可能并不总是可访问的,并且在大多数情况下,您的开发环境和生产环境并不相同,您将不得不返回并更改它。另一件事是,当 Django 被设计为不为您提供静态内容时,这不是一个好的做法。
如果你打算在开发中使用它,我建议你使用将其限制为 DEBUG=True的方法。告诉 Django 在开发过程中从临时位置提供静态内容,当DEBUG
设置为时True
是一种更好、更安全的做法。您不会将您的网站投入生产,DEBUG
对吧?好吧,至少你不应该。
以下是我的实现方式:
设置.py:
STATIC_DOC_ROOT = os.path.join(os.getcwd(), 'site_media')
网址.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。