Python flask jinja image file not found
Solution 1
For Flask, you should keep the static files usually under a folder "static" and then use the url_for function. Lets say your project is called "myproject" and using your example, it should look something like:
myproject/
app.py
templates/
static/
css/
images/
icons/
resultset_previous.png
Then in the template, you can call
<img src= {{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }} width="16" height="16" alt="previous" title="Previous" border="0">
Also, to answer your question about jinja versions etc, check this out
https://github.com/mitsuhiko/flask/blob/master/.travis-lowest-requirements.txt
Solution 2
See this section of the Flask documentation.
The correct way to refer to the static file from your template is:
<img src="{{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }}" width="16" height="16" alt="previous" title="Previous" border="0">
Related videos on Youtube
Bernard
Updated on September 14, 2022Comments
-
Bernard over 1 year
Newbie question.
I am using Flask, a webframe for Python. Flask uses Jinja to render the template. I do not know which version of Jinja Flask uses, nor do I know how to retrieve the Jinja version or the Flask version. I use Python version 2.7.
The template contains an image in the css/image directory. This image is visible when viewing the template as a file directly in the Firefox browser.
But not when executing Flask :
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/') @app.route('/hello/<name>') def hello(name=None): return render_template('Basic.html', name=name) if __name__ == '__main__': app.debug = True app.run()
The content of HTML file :
<!DOCTYPE HTML> <html> <body> <!-- variable example begin --> {% if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello World!</h1> {% endif %} <!-- variable example end --> <img src="css/images/icons/resultset_previous.png" width="16" height="16" alt="previous" title="Previous" border="0"> </body> </html>
The template run fine and variable example runs as expected. But the images is not displayed. Debug returns : "GET /hello/css/images/icons/resultset_previous.png HTTP/1.1" 404 -
I run Flask in VirtualEnv as suggested in the documentation. The path to the image seems to be unknown. How can I set the path?