这是一篇很长的文章,基本上总结了我为了使静态文件正常工作而学到的有关 Django 的所有知识(我花了一段时间才理解所有不同部分如何组合在一起)。
要在开发服务器(以及后来的真实服务器)中提供静态图像,您必须做一些事情(特别注意第三步和第四步):
设置 MEDIA_ROOT
MEDIA_ROOT 是一个常量,它告诉 Djangophysical文件的路径(在您的文件系统上)。使用您的示例,MEDIA_ROOT 需要设置为“C:/siteURL/galleries/”,就像您所写的那样。 MEDIA_ROOT 将在以下步骤之一中使用,这就是我们设置它的原因。
设置 MEDIA_URL
MEDIA_URL 是您的图像所在的“url”。换句话说,每当你想要获取图像时,要查找的 url以。。开始媒体_URL。通常这是not将以“http”开头,因为您是从自己的服务器提供服务(我的 MEDIA_URL 通常设置为“/site_media/”,意味着从根域开始,然后转到 site_media 等)
使用MEDIA_URL
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 仅在调试 url 模式中使用,以告诉 Django 从何处加载。 MEDIA_URL 只是鼓励您不要在所有 HTML 文件中放入绝对 URL,因为这样当您决定将文件移动到不同的服务器时,您必须手动更改它们(而不是仅更改 MEDIA_URL)持续的)。
当然,这些都不是必要的:您可以使用自己的文件夹对调试 url 模式进行硬编码,确保静态文件确实是从 url 获取的服务器(通过在浏览器中访问它),然后手动编码那without在 HTML 文件中使用 MEDIA_URL 设置,只是为了确保一切正常。