如何从目录读取图像,将其组合成<img src="">,并让Flask返回图像?

1 投票
2 回答
2356 浏览
提问于 2025-04-18 05:29

我有一个文件夹,里面全是图片。在我的一个模板里,我想显示这些图片。

获取模板的代码:

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

撰写回答