¿Dónde busca matraz los archivos de imagen?

Estoy configurando un servidor local usando el matraz. Todo lo que quiero hacer actualmente es mostrar una imagen usando la etiqueta img en la página index.html. Pero sigo recibiendo errores

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

¿Dónde busca matraz los archivos? Un poco de ayuda sería genial. Mi código HTML es

     

Hi Lionel Messi

Mi código de python es:

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

¿Está el archivo de imagen ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg en su directorio static ? Si lo mueve a su directorio estático y actualiza su HTML como tal:

  

Deberia de funcionar.

Además, vale la pena señalar, hay una mejor manera de estructurar esto.

Estructura de archivos:

 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

     

Hi Lionel Messi

Si lo hace de esta manera, se asegura de que no está codificando de forma rígida una ruta de URL para sus activos estáticos.

use la ruta absoluta donde realmente existe la imagen (por ejemplo, ‘/home/artitra/pictures/filename.jpg’

o crea una carpeta estática dentro del directorio de tu proyecto como este

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

entonces haz esto

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

entonces puedes acceder a tu imagen como esta en index.html

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

en img tag

De la documentación :

Las aplicaciones web dinámicas también necesitan archivos estáticos. Por lo general es de donde vienen los archivos CSS y JavaScript. Lo ideal es que su servidor web esté configurado para servirlos por usted, pero durante el desarrollo, Flask también puede hacer eso. Simplemente cree una carpeta llamada static en su paquete o junto a su módulo y estará disponible en /static en la aplicación.

Para generar URL para archivos estáticos, use el nombre del punto final 'static' especial:

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

El archivo debe almacenarse en el sistema de archivos como static/style.css .

Me tomó un tiempo para resolver esto también. url_for en Flask busca los puntos finales que especificó en el script routes.py .

Así que si tienes un decorador en tu archivo routes.py como @blah.route('/folder.subfolder') entonces Flask reconocerá el comando {{ url_for('folder.subfolder') , filename = "some_image.jpg" }} . El argumento 'folder.subfolder' envía a un punto final de Flask que reconoce.

Sin embargo, digamos que almacenó su archivo de imagen, some_image.jpg , en su subcarpeta, PERO no especificó esta subcarpeta como punto final de la ruta en su flask routes.py , su decorador de rutas se parece a @blah.routes('/folder') . Luego, debe solicitar su archivo de imagen de esta manera: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

IE le dice a Flask que vaya al punto final que conoce, “carpeta”, luego lo dirija desde allí poniendo la ruta del subdirectorio en el argumento de nombre de archivo.