django - dev / prod环境之间奇怪的模板循环失败

时间:2009-11-04 07:51:16

标签: django development-environment production-environment

我正在为需要图片库的网站制作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)。有什么想法吗?

2 个答案:

答案 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文件夹?