2009-11-04 56 views
0

我正在为需要图片库的网站开发django应用程序。由于该网站非常简单,我选择不使用数据库。在长廊的一部分,我在视图中一个循环,从图像文件夹中读取所有的图像文件,并将它们发送到模板,在那里它们被一个循环内呈现:django - dev/prod环境之间的奇怪模板循环故障

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 /'下的静态文件提供服务),但是当我上传到我的web服务器时,图像不会呈现。当我看呈现的HTML,这是我得到:

<div id="gallery"> </div> 

我确信静态URL工作在Web服务器上,试图通过静态URL访问一些随机图片 - http://mysite.com/static/images/some_image.jpg,和CSS绝对是工作(不要担心,我将在稍后使用单独的服务器来处理静态文件)。我应该说生产服务器运行python2.5,而我运行2.6(都有django 1.1)。有什么想法吗?

回答

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')

+0

这是有道理的,我实际上有一个如果os.path.isdir(文件夹)检查之前的列表理解,我想它没有超过这一点。你是对的,但它指向服务器的根,而不是我的应用程序目录 - 也许我最终会使用数据库...谢谢! – sa125

0

我猜测,原因是文件列表是空的。你有没有检查/静态/图像文件夹可以访问您的django应用程序?