我正在为需要图片库的网站制作django应用。由于网站相当简单,我选择不使用数据库。在gallery部分,我在视图中有一个循环,它从图像文件夹中读取所有图像文件,然后将它们发送到模板,在循环中呈现它们:
import os
from django.shortcuts import render_to_response
def show_pics(request):
"""sends a list of files to the view"""
folder = '/static/images'
files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f]
return render_to_response('gallery.html', { 'files' : files })
和模板:
<div id="gallery">
{% for file in files %}
<img src="{{ file }}" class="gallery-image" />
{% endfor %}
</div>
这在开发模式下工作得很好(我设置了url以在'/ static /'下提供静态文件),但是当我上传到我的网络服务器时,图像不会被渲染。当我查看渲染的html时,这就是我得到的:
<div id="gallery"> </div>
我通过静态网址http://mysite.com/static/images/some_image.jpg尝试访问一些随机图片,确保静态网址在网络服务器上正常工作,而css肯定有效(不用担心,我会使用单独的服务器)对于静态文件以后)。我应该说生产服务器正在运行python2.5而我正在运行2.6(两者都有django 1.1)。有什么想法吗?
答案 0 :(得分:2)
可以假设files
在模板中为空。您可以通过将{{ files }}
放入模板并查看其打印内容来确认这一点。最有可能,没什么。
然而,这方面几乎没有问题:
folder = '/static/images'
files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f]
首先,os.listdir采用的路径不是文档根目录的路径,而是文件系统根目录的路径。因此,如果您在服务器上执行ls /static/images
,它会显示什么?
作为一件小事,我更喜欢使用f.endswith('.jpg')
答案 1 :(得分:0)
我猜原因是你的文件列表是空的。您是否检查过django应用程序可以访问/ static / images文件夹?