2017-03-11 2 views
1

Auf einem Raspberry Pi habe ich eine einfache Flask-App geschrieben, die das aktuelle Datum und die Uhrzeit des Servers auf einer Webseite anzeigt. Dieser Teil funktioniert großartig. Die Seite sollte auch ein Bild anzeigen. Dieser Teil funktioniert nicht. Das Bild wird im Fotoordner unter dem App-Ordner Web_Test/Fotos gespeichert. Ich benutze eine CSS-Datei, die in einem statischen Ordner gespeichert ist, und das funktioniert gut. Ich benutze url_for die URL zum Bild zu erstellen:Flask Webseite kann Bilddatei nicht finden

<p><img src="{{url_for('photos', filename='image1.jpg')}}"></p> 

Da Fotos ist kein bekannter Endpunkt für den url_for Befehl, habe ich: app.add_url_rule('/photos/<path:filename>', view_func=app.send_static_file) den Fotos Ordner als Endpunkt hinzuzufügen. Jedes Mal, wenn ich über einen Webbrowser auf die Webseite zugreife, zeigt mein Befehlsfenster, in dem ich python (python3 photo.py) ausgeführt habe, GET /photos/image1/jpg HTTP/1.1" 404 an. Es gibt keine spezifischen Fehler, aber auch kein Bild. Ich habe viele der Beiträge hier zu diesem Thema gelesen, aber nichts hat geholfen. Das ist mein photo.py Code:

from flask import Flask, render_template 
import datetime 
app = Flask(__name__) 

app.add_url_rule('/photos/<path:filename>', endpoint='photos', view_func=app.send_static_file) 
@app.route('/') 
def photo(): 
    now = datetime.datetime.now() 
    timeString = now.strftime("%Y-%m-%d %H:%M") 
    templateData = { 
     'title' : 'Latest Photo', 
     'time' : timeString 
     } 
    return render_template('photo1.html', **templateData) 

if __name__ == '__main__': 
    app.run(debug=True, host='0.0.0.0', port=80) 

Das ist mein photo1.html Code:

<!DOCTYPE html> 
    <head> 
    <link rel="stylesheet" href='/static/style.css' /> 
    <title>{{title}}</title> 
    </head> 

    <body> 
    <h1>Latest Photo</h1> 
    <h2>Current date and time: {{time}}</h2> 
    <p> <img src="{{url_for('photos', filename='image1.jpg')}}"></p> 
    </body> 
</html> 

Irgendwelche Gedanken oder Anregungen würde sehr geschätzt werden. Danke!

Antwort

1

Die Art und Weise Ihr Programm wird derzeit geschrieben, wird das Bild sichtbar sein, wenn Sie das Projekt Layout wie folgt neu zu organisieren:

project 
├── app.py 
├── static 
│   └── image1.jpg 
└── templates 
   └── photo1.html 

Die Tatsache, dass Sie send_static_file, um Fotos anzuzeigen schlägt vor, verwenden möchten, dass Fotos statischen Ressourcen . Wenn das der Fall ist, dann wäre es besser:

1) Bewegen Sie image1.jpg zu static/photos/image1.jpg

2) Ändern Sie die Vorlage wie folgt aus:

<p> <img src="{{url_for('static', filename='photos/image1.jpg')}}"></p> 

3) Lassen Sie die app.add_url_rule('/photos/<path:filename>', ...) in app.py

+0

Vielen Dank für Ihre Antwort. Ich habe das versucht, habe aber das selbe Problem. Das Befehlsfenster zeigt dies jetzt an: "GET /static/photo/image1.jpg HTTP/1.1" 404 – simlc0523

+0

Nun, duh. Sobald ich den Ordnernamen richtig geschrieben habe (Fotos statt Foto), hat es funktioniert! Vielen Dank! Meine einzige Sorge ist, dass das Bild im Ordner Fotos regelmäßig aktualisiert wird. War mir nicht sicher, ob das ein Problem mit einem "statischen" Ordner sein würde. – simlc0523

Verwandte Themen