wake-up-neo.com

Wo sucht flask nach Bilddateien?

Ich richte mit flask einen lokalen Server ein. Derzeit möchte ich nur ein Bild mit dem Tag img auf der Seite index.html anzeigen. Aber ich bekomme immer Fehler

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

Woher kommt flask nach Dateien suchen? Eine kleine Hilfe wäre toll. Mein HTML-Code ist

<html>
  <head>

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

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

  </body>

</html>

Mein python Code ist:

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

Befindet sich die Bilddatei ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg in Ihrem static Verzeichnis? Wenn Sie es in Ihr statisches Verzeichnis verschieben und Ihren HTML-Code als solchen aktualisieren:

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

Es sollte funktionieren.

Erwähnenswert ist auch, dass es einen besseren Weg gibt, dies zu strukturieren.

Dateistruktur:

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>

Auf diese Weise stellen Sie sicher, dass Sie keinen URL-Pfad für Ihre statischen Assets fest codieren.

53
Matt Healy

verwenden Sie den absoluten Pfad, unter dem das Bild tatsächlich existiert (z. B. "/home/artitra/pictures/filename.jpg").

oder erstellen Sie so einen statischen Ordner in Ihrem Projektverzeichnis

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

dann mach das

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

dann können Sie auf Ihr Bild wie folgt zugreifen: index.html

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

img tag

17
Balaji

Aus der Dokumentation :

Dynamische Webanwendungen benötigen auch statische Dateien. Hierher kommen normalerweise die CSS- und JavaScript-Dateien. Idealerweise ist Ihr Webserver so konfiguriert, dass er diese für Sie bereitstellt, aber während der Entwicklung kann Flask dies auch. Erstellen Sie einfach einen Ordner mit dem Namen static in Ihrem Paket oder neben Ihrem Modul und er ist in der Anwendung unter /static Verfügbar.

Verwenden Sie zum Generieren von URLs für statische Dateien den speziellen Endpunktnamen 'static':

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

Die Datei muss im Dateisystem als static/style.css Gespeichert werden.

7
Burhan Khalid

Ich habe eine Weile gebraucht, um das herauszufinden. url_for In Flask sucht nach Endpunkten, die Sie im Skript routes.py Angegeben haben.

Wenn Sie also einen Decorator in Ihrer routes.py - Datei haben, wie @blah.route('/folder.subfolder'), dann erkennt Flask den Befehl {{ url_for('folder.subfolder') , filename = "some_image.jpg" }}. Die 'folder.subfolder' - Argument sendet es an einen Flask Endpunkt, den es erkennt.

Nehmen wir jedoch an, Sie haben Ihre Bilddatei some_image.jpg In Ihrem Unterordner gespeichert, diesen Unterordner haben Sie jedoch nicht als Routenendpunkt in Ihrem flask routes.py Angegeben. Ihr Streckendekorator sieht aus wie @blah.routes('/folder'). Dann müssen Sie nach Ihrer Bilddatei fragen: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

I.E. Sie teilen Flask mit, zu dem ihm bekannten Endpunkt "folder" zu wechseln, und leiten ihn von dort aus weiter, indem Sie den Pfad des Unterverzeichnisses in das Dateinamenargument einfügen.

3
pelon