So stellen Sie statische Dateien in Flask bereit

| | | | | | | | | | | | | | | | | | | | |

Das ist also peinlich. Ich habe eine Anwendung, die ich in Flask zusammengeschmissen habe, und im Moment stellt sie nur eine einzelne statische HTML-Seite mit einigen Links zu CSS und JS bereit. Und ich kann nicht finden, wo in der Dokumentation Flask beschreibt die Rückgabe statischer Dateien. Ja, ich könnte render_template verwenden, aber ich weiß, dass die Daten keine Vorlagen sind. Ich hätte gedacht, send_file oder url_for wäre das Richtige, aber ich konnte diese nicht zum Laufen bringen. In der Zwischenzeit öffne ich die Dateien, lese Inhalte und Erstellen einer Antwort mit entsprechendem Mimetyp:

import os.path from Flask import Flask, Antwort app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # pragma: no cover return os.path.abspath(os.path.dirname(__file__)) def get_file(filename): # pragma: no cover try: src = os.path.join(root_dir(), filename) # Herausfinden, wie Flask statische Dateien zurückgibt # Versucht: # - render_template # - send_file # Dies sollte nicht so offensichtlich sein return open(src).read() außer IOError as exc: return str(exc) @app. route("/", methods=["GET"]) def metrics(): # pragma: no cover content = get_file("jenkins_analytics.html") return Response(content, mimetype="text/html") @app .route("/", defaults={"path": ""}) @app.route("/<path:path>") def get_resource(path): # pragma: nein cover mimetypes = { ".css": "text/css", ".html": "text/html", ".js": "application/javascript", } complete_path = os.path. join(root_dir(), path) ext = os.path.splitext(path)[1] mimetype = mimetypes.get(ext, "text/html") content = get_file(complete_path) return Response(content, mimetype=mimetype ) if __name__ == "__main__": # pragma: no cover app.run(port=80) 

Möchte jemand ein Codebeispiel oder eine URL dafür geben? Ich weiß, das wird kinderleicht.