Where does flask look for image files?
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.pystatic |----ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpgtemplates |----index.html
app.py
from flask import Flask, render_template, url_forapp = 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.
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.