这是一篇很长的文章,基本上总结了我从Django中学到的所有知识,以便使静态文件正常工作(花了我一段时间才了解所有不同部分如何组合在一起)。
为了在开发服务器(以及后来的真实服务器)中提供静态映像,您将必须做一些事情(特别注意第三和第四步):
MEDIA_ROOT是一个常量,它告诉Django文件的 路径(在您的文件系统上)。使用您的示例,就像您编写的一样,需要将MEDIA_ROOT设置为’C:/ siteURL / galleries /’。MEDIA_ROOT将在以下步骤之一中使用,这就是我们设置它的原因。
MEDIA_URL是图像所在的“ URL”。换句话说,只要你想获得的图像,链接,寻找 与启动 MEDIA_URL。通常,这 以“ http”开头,因为是从您自己的服务器提供服务(我的MEDIA_URL通常设置为“ / site_media /”,这意味着从根域开始,然后转到site_media等)。
MEDIA_URL不能正常运行,您实际上必须使用它。例如,当您编写获取文件的HTML时,它需要如下所示:
<li><img src="{{MEDIA_URL}}/160.jpg" /></li>
看看我如何告诉模板使用MEDIA_URL前缀吗?最终转化为'http://some-good-URL/galleries/160.jpg'
。
请注意,为了能够在模板中实际使用MEDIA_URL ,如果我没有记错的话,您将必须将该行添加'django.core.context_processors.media'
到TEMPLATE_CONTEXT_PROCESSORS
settings.py文件中的设置中。
在实际环境中,您将配置地址为“ static_media”之类的文件,而无需通过Django即可提供。但是在开发环境中,您也希望从Django对其进行服务器处理,因此您应该将此通用行添加到urls.py文件的末尾:
if settings.DEBUG:
# Serve static files in debug.
urlpatterns += patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT,
'show_indexes' : True}),
)
请注意,使用url“ site_media / *”(实际上是我的MEDIA_URL)如何处理并从我的MEDIA_ROOT文件夹(即MEDIA_ROOT设置起作用的位置)提供该内容。
让我感到困惑的是,这里的很多事情都是为了方便。例如,仅在您的调试网址格式中使用MEDIA_ROOT,以告知Django从何处加载。并且MEDIA_URL只是为了鼓励您不要在所有HTML文件中放入绝对URL,因为当您决定将文件移动到其他服务器时,必须手动更改所有文件(而不是仅更改MEDIA_URL不变)。
当然,这一切都不是必需的:您可以使用自己的文件夹对调试URL模式进行硬编码,确保静态文件确实是从URL服务器存储的(通过在浏览器中访问它),然后进行手工编码而无需 在HTML文件中使用MEDIA_URL设置,只是为了确保一切正常。