Django - 将文件名列表渲染到模板中
我正在为一个图片画廊页面生成模板。我的做法是这样的:
- 把图片放在一个名为“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函数时出错了,因为它在访问提供的文件路径时遇到了一些问题。我确认了一下目录的权限和路径是正确的,然后就好了。
感谢那些帮助过我的人。