如何从目录读取图像,将其组合成<img src="">,并让Flask返回图像?
我有一个文件夹,里面全是图片。在我的一个模板里,我想显示这些图片。
获取模板的代码:
render_template("registration.html", images=images)
在模板中:(使用 image/{{image}} 是因为 url_for 不支持变量)
{% for image in images %}
<input class="avatar" type = "radio" name = "avatar" value = "{{image}}"/><img src = "image/{{image}}"/>
{% endfor %}
在 app.py 文件里:
@app.route('/images/<image>')
def images(image):
return send_file('public/assets/thumbs'+image, mimetype='image/jpg')
(public/assets/thumbs 是存放图片的文件夹)不过,这样做完全失败了。有啥窍门或者方法可以让我让这个工作吗?
2 个回答
2
我不知道这个方法是否对你有帮助,也不确定它是否是个好习惯,但我在模板中显示目录里的图片时(使用了Andrew Allbright下面描述的send_from_directory方法),我用的是:
{% for image in images %}
<img src="{{url_for('static', filename='image/')}}{{image}}"></img>
{% endfor %}
我记得我从这个StackOverflow的帖子中得到了灵感:在Flask中使用url_for()创建动态URL(第二个答案)提到你可以在模板中给url_for()传递参数。
1
解决方案:send_from_directory()
@app.route("/image/<image>", methods=["GET"])
def image(image):
return send_from_directory(app.static_folder, 'assets/thumbs/' + image, mimetype='image/jpg')