use*_*503 2 python django image
我已经阅读了这篇文章(以及关于该主题的其他几篇文章),但仍然无法弄清楚如何显示图像,除非将链接到web服务上存在的文件硬编码到html模板中.
我进入了urls.py:
...
(r'^galleries/(landscapes)/(?P<path>.jpg)$',
'django.views.static.serve', {'document_root': settings.MEDIA_URL}),
...
Run Code Online (Sandbox Code Playgroud)
其中'landscapes'是我试图展示图片的专辑之一.(还有几个.)
在views.py中,它使用以下代码调用模板:
...
<li><img src=160.jpg alt='' title='' /></li>
...
Run Code Online (Sandbox Code Playgroud)
它将html中的图像链接解析为:
http://127.0.0.1:8000/galleries/landscapes/160.jpg
Run Code Online (Sandbox Code Playgroud)
在settings.py我有:
MEDIA_ROOT = 'C:/siteURL/galleries/'
MEDIA_URL = 'http://some-good-URL/galleries/'
Run Code Online (Sandbox Code Playgroud)
在文件系统中有一个文件C:/siteURL/galleries/landscapes/160.jpg我在http://some-good-URL/galleries/landscapes/160.jpg上有相同的文件
无论我在urls.py中使用什么 - MEDIA_ROOT或MEDIA_URL(期望提供本地图像或来自网络服务器) - 我都会在浏览器的源代码中关注:
<li><img src=160.jpg /></li>
Run Code Online (Sandbox Code Playgroud)
浏览器中没有显示图像.
我究竟做错了什么?
Eda*_*aor 11
这是一个很长的帖子,基本上总结了我学到的关于Django的所有东西,以便让静态文件工作(我花了一些时间来理解所有不同的部分是如何组合在一起的).
要在开发服务器(以及后来的真实服务器)中提供静态图像,您将不得不做一些事情(特别注意第三和第四步):
设置MEDIA_ROOT
MEDIA_ROOT是一个常量,它告诉Django 文件的物理路径(在您的文件系统上).使用您的示例,MEDIA_ROOT需要设置为'C:/ siteURL/galleries /',就像您写的那样.MEDIA_ROOT将用于以下步骤之一,这就是我们设置它的原因.
设置MEDIA_URL
MEDIA_URL是您的图片所在的"网址".换句话说,只要你想获得的图像,链接,寻找与启动 MEDIA_URL.通常这不会以"http"开头,因为您从自己的服务器提供服务(我的MEDIA_URL通常设置为'/ site_media /',意味着从根域开始,然后转到site_media等)
使用MEDIA_URL
MEDIA_URL无法通过魔法运行,您实际上必须使用它.例如,当您编写获取文件的HTML时,它需要如下所示:
<li><img src="{{MEDIA_URL}}/160.jpg" /></li>
Run Code Online (Sandbox Code Playgroud)
看看我如何告诉模板使用MEDIA_URL前缀?这最终转化为'http://some-good-URL/galleries/160.jpg'.
请注意,为了能够在模板中实际使用MEDIA_URL,您必须在settings.py文件中将该行添加'django.core.context_processors.media'到您的TEMPLATE_CONTEXT_PROCESSORS设置中,如果我没有记错的话.
使您的dev服务器提供静态文件
在真实环境中,您将配置具有"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}),
)
Run Code Online (Sandbox Code Playgroud)
注意如何使用url"site_media/*"(实际上是我的MEDIA_URL)并从我的MEDIA_ROOT文件夹(MEDIA_ROOT设置发挥作用的地方)提供它.
最后的说明
令我困惑的是,这里的很多东西都是为了方便.例如,MEDIA_ROOT仅用于您的调试URL模式,以告知Django从何处加载.MEDIA_URL只是鼓励您不要在所有HTML文件中放入绝对URL,因为当您决定将文件移动到其他服务器时,您必须手动更改它们(而不是仅仅更改MEDIA_URL)不变).
当然,这些都不是必需的:您可以使用自己的文件夹对调试url模式进行硬编码,确保静态文件确实是来自URL的服务器(通过在浏览器中访问它),然后手动编码即不使用MEDIA_URL设置到HTML文件中,只是为了确保工作的事情.
这看起来很麻烦......:
r'^galleries/(landscapes)/(?P<path>.jpg)$'
Run Code Online (Sandbox Code Playgroud)
这个RE只匹配带有单个字符的图像名称jpg,而不是后缀,而不是四个(如,例如'160.jpg').也许你的意思是......
r'^galleries/(landscapes)/(?P<path>.*jpg)$'
Run Code Online (Sandbox Code Playgroud)
...?
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |