2015-01-29 13 views
12

Ich richte einen lokalen Server mit Kolben ein. Alles, was ich gerade tun möchte, ist ein Bild mit dem img-Tag auf der Seite index.html anzuzeigen. Aber ich erhalte immer FehlerWo sucht Flask nach Bilddateien?

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

Wo sieht Kolben für Dateien? Eine kleine Hilfe wäre großartig. 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') 
+1

Bitte lesen Sie die [Dokumentation] (http://flask.pooco.org/docs/0.10/quickstart/#static-files) –

Antwort

17

Ist 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:

Es sollte funktionieren.

Auch es ist erwähnenswert, es gibt eine bessere Möglichkeit, 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 __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> 

es auf diese Weise Dadurch wird sichergestellt, dass Sie nicht hart codierte eine URL sind Pfad für Ihre statischen Assets.

5

Vom documentation:

Dynamische Web-Anwendungen benötigen auch statische Dateien. Das ist normalerweise wo die CSS- und JavaScript-Dateien herkommen. Idealerweise ist Ihr Webserver so konfiguriert, dass er sie für Sie bereitstellt, aber während der Entwicklung kann Flask das auch tun: . Erstellen Sie einfach einen Ordner namens static in Ihrem Paket oder neben Ihrem Modul und es wird unter /static auf der Anwendung verfügbar sein.

Um URLs für statische Dateien zu erzeugen, verwenden Sie den speziellen 'static' Endpunkt Name:

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

Die Datei auf dem Dateisystem als static/style.css gespeichert werden muss.

3

Verwendung absoluter Pfad, in dem das Bild tatsächlich (z) ‚/ home/artitra/pictures/Dateinamen existiert.jpg‘

oder erstellen statische Ordner in Ihrem Projektverzeichnis wie diese

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

dann tun dies

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

dann können Sie Ihr Bild wie dieser Zugang in index.html

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

im img-tag

1

Es hat eine Weile gedauert, das herauszufinden. url_for in Flask sucht nach Endpunkten, die Sie im Skript routes.py angegeben haben. Wenn Sie einen Dekorateur in Ihrer routes.py Datei wie @blah.route('/folder.subfolder') haben, erkennt Flask den Befehl {{ url_for('folder.subfolder') , filename = "some_image.jpg" }}. Das Argument 'folder.subfolder' sendet es an einen Flask-Endpunkt, den es erkennt.

aber wir sagen lassen, dass Sie Ihre Bilddatei gespeichert, some_image.jpg, in Ihrem Unterordner, ABER nicht angeben, diese Unterordner als Routenendpunkt in Ihrem Kolben routes.py sieht Ihr Weg Dekorateur wie @blah.routes('/folder'). Sie müssen dann nach Ihrer Bilddatei auf diese Weise fragen: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

I.E. Sie sagen Flask, zu dem Endpunkt zu gehen, den er kennt, "folder", , und leiten Sie ihn dann von dort, indem Sie den Pfad des Unterverzeichnisses in das Argument filename setzen.

Verwandte Themen