烧瓶在哪里寻找图像文件?

我正在使用烧瓶设置一个本地服务器。当前我想做的就是使用 index.html 页面中的 img 标记显示一个图像。但我一直收到 错误

GET http://localhost:5000/
ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 404 (NOT FOUND)

烧瓶在哪里寻找文件? 一点帮助将是巨大的。 我的 HTML 代码是

<html>
<head>


</head>
<body>
<h1>Hi Lionel Messi</h1>


<img src= "ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg ">


</body>


</html>

我的 Python 代码是:

@app.route('/index', methods=['GET', 'POST'])
def lionel():
return app.send_static_file('index.html')
220525 次浏览

Is the image file ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg in your static directory? If you move it to your static directory and update your HTML as such:

<img src="/static/ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg">

It should work.

Also, it is worth noting, there is a better way to structure this.

File structure:

app.py
static
|----ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg
templates
|----index.html

app.py

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


@app.route('/index', methods=['GET', 'POST'])
def lionel():
return render_template('index.html')


if __name__ == '__main__':
app.run()

templates/index.html

<html>
<head>


</head>
<body>
<h1>Hi Lionel Messi</h1>


<img src="\{\{url_for('static', filename='ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg')}}" />


</body>


</html>

Doing it this way ensures that you are not hard-coding a URL path for your static assets.

From the documentation:

Dynamic web applications also need static files. That’s usually where the CSS and JavaScript files are coming from. Ideally your web server is configured to serve them for you, but during development Flask can do that as well. Just create a folder called static in your package or next to your module and it will be available at /static on the application.

To generate URLs for static files, use the special 'static' endpoint name:

url_for('static', filename='style.css')

The file has to be stored on the filesystem as static/style.css.

use absolute path where the image actually exists (e.g) '/home/artitra/pictures/filename.jpg'

or create static folder inside your project directory like this

| templates
- static/
- images/
- yourimagename.jpg

then do this

app = Flask(__name__, static_url_path='/static')

then you can access your image like this in index.html

src ="/static/images/yourimage.jpg"

in img tag

It took me a while to figure this out too. url_for in Flask looks for endpoints that you specified in the routes.py script.

So if you have a decorator in your routes.py file like @blah.route('/folder.subfolder') then Flask will recognize the command \{\{ url_for('folder.subfolder') , filename = "some_image.jpg" }} . The 'folder.subfolder' argument sends it to a Flask endpoint it recognizes.

However let us say that you stored your image file, some_image.jpg, in your subfolder, BUT did not specify this subfolder as a route endpoint in your flask routes.py, your route decorator looks like @blah.routes('/folder'). You then have to ask for your image file this way: \{\{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

I.E. you tell Flask to go to the endpoint it knows, "folder", then direct it from there by putting the subdirectory path in the filename argument.

If you harcode src for image in html templates, it will be an app route on flask and the most important thing for image in flask is put it on the static folder