Je suis en train de mettre en place un serveur local en utilisant flask. Tout ce que je veux faire actuellement, c'est afficher une image à l'aide de la balise img dans la page index.html. Mais je continue à obtenir erreur
GET http://localhost:5000/
ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 404 (NOT FOUND)
Où flask cherche-t-il des fichiers? Un petit coup de pouce serait bien. Mon code HTML est
<html>
<head>
</head>
<body>
<h1>Hi Lionel Messi</h1>
<img src= "ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg ">
</body>
</html>
Mon code python est:
@app.route('/index', methods=['GET', 'POST'])
def lionel():
return app.send_static_file('index.html')
Le fichier image ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg est-il dans votre répertoire static
? Si vous le déplacez dans votre répertoire statique et mettez à jour votre code HTML en tant que tel:
<img src="/static/ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg">
Ça devrait marcher.
Il convient également de noter qu’il existe un meilleur moyen de structurer cela.
Structure du fichier:
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 __== '__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>
En procédant ainsi, vous éviterez de coder en dur un chemin d’URL pour vos actifs statiques.
utiliser le chemin absolu où l'image existe réellement (par exemple) '/home/artitra/pictures/filename.jpg'
ou créez un dossier statique dans votre répertoire de projet comme ceci
| templates
- static/
- images/
- yourimagename.jpg
alors fais ceci
app = Flask(__name__, static_url_path='/static')
alors vous pouvez accéder à votre image comme ceci dans index.html
src ="/static/images/yourimage.jpg"
dans img tag
De la documentation :
Les applications Web dynamiques ont également besoin de fichiers statiques. C’est d’habitude l’origine des fichiers CSS et JavaScript. Idéalement, votre serveur Web est configuré pour les servir à votre place, mais pendant le développement Flask peut également le faire. Créez simplement un dossier appelé
static
dans votre paquet ou à côté de votre module. et il sera disponible à/static
sur l'application.Pour générer des URL pour des fichiers statiques, utilisez la commande spéciale
'static'
nom du noeud final:url_for('static', filename='style.css')
Le fichier doit être stocké sur le système de fichiers en tant que
static/style.css
.
Il m'a fallu un certain temps pour comprendre cela aussi. url_for
In Flask recherche les points de terminaison que vous avez spécifiés dans le script routes.py
.
Donc, si vous avez un décorateur dans votre fichier routes.py
Comme @blah.route('/folder.subfolder')
alors Flask reconnaîtra la commande {{ url_for('folder.subfolder') , filename = "some_image.jpg" }}
.]. Le 'folder.subfolder'
L'argument l'envoie à un Flask endpoint qu'il reconnaît.
Cependant, disons que vous avez stocké votre fichier image, some_image.jpg
, Dans votre sous-dossier, MAIS n’a pas spécifié ce sous-dossier en tant que point de terminaison de la route dans votre flask routes.py
, votre décorateur de route ressemble à @blah.routes('/folder')
. Vous devez ensuite demander votre fichier image de la manière suivante: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}
C'EST À DIRE. vous dites à Flask d'aller au noeud final qu'il connaît, "dossier", puis dirigez-le à partir de là en plaçant le chemin du sous-répertoire dans l'argument du nom de fichier.