为什么只有在静态文件夹中才能显示图像?

时间:2018-06-13 07:38:54

标签: python html flask

我正在建立一个图像识别Flask项目。我想要网页上显示的图像。这是我项目的结构:

enter image description here

如您所见,statictemplatesupload位于同一文件夹中。如果我将图像保存到static文件夹(由VS2015烧瓶项目生成)并像这样写result.html

<!doctype html>
<h3>{{ outcome_info }}</h3>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="utf-8">
    <title>Flood Classifier</title>
</head>
<body> 
    <img src="{{url_for('static', filename=thename)}}">
</body>
</html>

调用此Python函数时,图像将成功显示:

@app.route('/classify', methods=['POST','GET'])
def classify():
    global image
    image = np.expand_dims(image, axis = 0)
    result = model.predict(image)
    if result[0][0] == 1:
        result = "flood"
    else:
        result = "no flood"
    return render_template('result.html', thename = imagename, outcome_info = result)

但是,如果我将图像文件保存到upload(由我自己创建),只需更改result.html中的文件夹名称,如下所示:

<!doctype html>
<h3>{{ outcome_info }}</h3>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="utf-8">
    <title>Flood Classifier</title>
</head>
<body> 
    <img src="{{url_for('upload', filename=thename)}}">
</body>
</html>

调用Python函数时不会显示图像。将必须的图片保存到static文件夹中还是有些我误解的内容?

2 个答案:

答案 0 :(得分:3)

您可以使用此配置:

from flask import Flask
app = Flask(__name__, static_url_path = "/upload", static_folder = "upload")

然后您可以按如下方式访问图像:

<img src='/upload/image1.jpg' width="200" height="85">

查看此答案以获取更多详细信息:Cannot show image from STATIC_FOLDER in Flask template

答案 1 :(得分:1)

我认为你误解了url_for的工作方式。

第一个参数是endpointendpoint大致是注册的路由处理程序。 static是一个内置的路由处理程序,可处理对http://yourserver/static/xxxx的所有请求。

设置static_folder时,您将烧瓶设置为通过路径static提供该文件夹下的所有文件。您还可以通过设置static_url_path来覆盖此默认路由。

doc