Django - 将文件名列表渲染到模板中

1 投票
2 回答
2054 浏览
提问于 2025-04-17 07:16

我正在为一个图片画廊页面生成模板。我的做法是这样的:

  • 把图片放在一个名为“images”的文件夹的子目录里
    • 这个图片文件夹的名字和画廊的标题是一样的
  • 视图会把文件名的列表传递给模板
  • 模板会循环这个列表,创建标签

所以我的视图代码是

def some_gallery(request):
    #LOGIC TO GET A LIST OF FILENAMES

    variables = RequestContext(request,{
        'user' : request.user,
        'title' : 'something',
        'files' : fileList
    })
    return render_to_response('gallery_template.html',variables)

而模板代码是

....
{% for file in files %}
    <img src="/path/to/images/{{ title }}/{{ file }}">
{% endfor %}
....

我遇到的问题是,当我尝试使用os.listdir函数时,Django出现了500错误。我该如何获取我需要的文件列表呢?

导致500错误的视图代码版本

def some_gallery(request):

    variables = RequestContext(request,{
        'user' : request.user,
        'title' : 'something',
        'files' : os.listdir('/path/to/gallery')
    })
    return render_to_response('gallery_template.html',variables)

另外我应该说明一下,文件路径是有效的,所以如果我直接访问这个网址,我可以正常看到图片。

编辑:修正了代码示例中的拼写错误

2 个回答

2

你的字典不是有效的Python代码,因为你用了“=”而不是“:”。正确的写法应该是:

variables = RequestContext(request,{
    'user' : request.user,
    'title' : 'something',
    'files' : os.listdir('/path/to/gallery')
})

还有一点,listdir需要一个绝对路径,你可以用以下方法获取你项目的根路径:

ROOT_PATH = os.path.abspath(os.path.dirname(__file__).decode('utf-8')).replace('\\', '/') 
2

我搞定了。我的方法是对的,所以如果有人想做类似的事情,这些代码示例应该能用。

我遇到的问题是,Django在调用listdir函数时出错了,因为它在访问提供的文件路径时遇到了一些问题。我确认了一下目录的权限和路径是正确的,然后就好了。

感谢那些帮助过我的人。

撰写回答