0

我正在为需要图片库的网站开发 django 应用程序。由于该站点相当简单,我选择不使用数据库。在画廊部分,我在视图中有一个循环,它从图像文件夹中读取所有图像文件,并将它们发送到模板,它们在循环中呈现:

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>

我通过尝试通过静态 url - http://mysite.com/static/images/some_image.jpg访问一些随机图片来确保静态 url 在网络服务器上工作,并且 css 肯定可以工作(不用担心,稍后我将为静态文件使用单独的服务器)。我可能应该说生产服务器正在运行 python2.5 而我正在运行 2.6(两者都有 django 1.1)。有什么想法吗?

4

2 回答 2

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

于 2009-11-04T08:13:09.790 回答
0

我猜原因是您的文件列表为空。您是否检查过您的 django 应用程序可以访问 /static/images 文件夹?

于 2009-11-04T08:19:35.403 回答