Come servire file statici in Flask

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

Quindi è imbarazzante. Ho un'applicazione che ho messo insieme in Flask e per ora sta solo servendo una singola pagina HTML statica con alcuni collegamenti a CSS e JS. E non riesco a trovare dove nella documentazione Flask descrive la restituzione di file statici. Sì, potrei usare render_template ma so che i dati non sono basati su modelli. Avrei pensato che send_file o url_for fosse la cosa giusta, ma non sono riuscito a farli funzionare. Nel frattempo, apro i file, leggo il contenuto e truccare una Risposta con un tipo mime appropriato:

import os.path from flask import Flask, Response app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # pragma: nessuna copertura return os.path.abspath(os.path.dirname(__file__)) def get_file(filename): # pragma: nessuna copertura try: src = os.path.join(root_dir(), filename) # Scopri come flask restituisce file statici # Provato: # - render_template # - send_file # Questo non dovrebbe essere così non ovvio return open(src).read() eccetto IOError come exc: return str(exc) @app. route("/", metodi=["GET"]) def metrics(): # pragma: no cover content = get_file("jenkins_analytics.html") return Response(content, mimetype="text/html") @app .route("/", defaults={"percorso": ""}) @app.route("/<percorso:percorso>") def get_resource(percorso): # pragma: no cover mimetypes = { ".css": "text/css", ".html": "text/html", ".js": "application/javascript", } complete_path = os.path. join(root_dir(), percorso) ext = os.path.splitext(percorso)[1] mimetype = mimetypes.get(ext, "testo/html") content = get_file(percorso_completo) return Response(content, mimetype=mimetype ) if __name__ == "__main__": # pragma: no cover app.run(port=80) 

Qualcuno vuole fornire un esempio di codice o un URL per questo? So che sarà semplicissimo.