Flask网页找不到图像文件

sim*_*523 8 python image flask

在 Raspberry Pi 上,我编写了一个简单的 Flask 应用程序,用于在网页上显示服务器的当前日期和时间。那部分效果很好。该页面还应该显示图像。那部分不起作用。图像存储在应用程序文件夹下的照片文件夹中:Web_Test/photos。我使用存储在静态文件夹中的 css 文件,效果很好。我使用 url_for 创建图像的 URL:

<p><img src="{{url_for('photos', filename='image1.jpg')}}"></p>
Run Code Online (Sandbox Code Playgroud)

由于 photos 不是 url_for 命令的已知端点,因此我使用:app.add_url_rule('/photos/<path:filename>', view_func=app.send_static_file)将 photos 文件夹添加为端点。每次我从网络浏览器访问网页时,我运行 python (python3 photo.py) 的命令窗口都会显示GET /photos/image1/jpg HTTP/1.1" 404. 没有具体的错误,但也没有图像。我已经阅读了这里有关此问题的许多帖子,但没有任何帮助。这是我的 photo.py 代码:

from flask import Flask, render_template
import datetime
app = Flask(__name__)

app.add_url_rule('/photos/<path:filename>', endpoint='photos', view_func=app.send_static_file)
@app.route('/')
def photo():
    now = datetime.datetime.now()
    timeString = now.strftime("%Y-%m-%d %H:%M")
    templateData = {
        'title' : 'Latest Photo',
        'time' : timeString
        }
    return render_template('photo1.html', **templateData)

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)

这是我的 photo1.html 代码:

<!DOCTYPE html>
  <head>
    <link rel="stylesheet" href='/static/style.css' />
    <title>{{title}}</title>
  </head>

  <body>
    <h1>Latest Photo</h1>
    <h2>Current date and time: {{time}}</h2>
    <p> <img src="{{url_for('photos', filename='image1.jpg')}}"></p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

任何想法或建议将不胜感激。谢谢!

Sto*_*ica 7

按照当前编写程序的方式,如果您像这样重新组织项目布局,则图像将可见:

\n\n
project\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 static\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 image1.jpg\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 photo1.html\n
Run Code Online (Sandbox Code Playgroud)\n\n

您想要用来send_static_file显示照片这一事实表明照片是静态资源。如果是这样的话,那么最好:

\n\n

1)image1.jpg移至static/photos/image1.jpg

\n\n

2)像这样更改模板:

\n\n
<p> <img src="{{url_for(\'static\', filename=\'photos/image1.jpg\')}}"></p>\n
Run Code Online (Sandbox Code Playgroud)\n\n

3)app.add_url_rule(\'/photos/<path:filename>\', ...)放下app.py

\n


Val*_*avi 5

我刚刚在项目文件夹中创建了一个名为“ static ”的文件夹,并将图像移至其中,我的问题得到了解决。

app.py
static
   |----image.jpg
templates
   |----index.html
Run Code Online (Sandbox Code Playgroud)

并像这样更改了index.html文件:

<img src="/static/image.jpg">
Run Code Online (Sandbox Code Playgroud)