Como servir arquivos estáticos no Flask

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

Então isso é embaraçoso. Eu tenho um aplicativo que eu juntei em Flask e por enquanto ele está apenas servindo uma única página HTML estática com alguns links para CSS e JS. E eu não consigo encontrar onde na documentação Flask descreve o retorno de arquivos estáticos. Sim, eu poderia usar render_template, mas sei que os dados não são modelados. Eu teria pensado que send_file ou url_for era a coisa certa, mas não consegui fazê-los funcionar. Enquanto isso, estou abrindo os arquivos, lendo o conteúdo e montando uma Resposta com o tipo MIME apropriado:

import os.path from flask import Flask, Response app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # pragma: sem cobertura return os.path.abspath(os.path.dirname(__file__)) def get_file(filename): # pragma: sem cobertura try: src = os.path.join(root_dir(), filename) # Descubra como o flask retorna arquivos estáticos # Tentei: # - render_template # - send_file # Isso não deve ser tão não óbvio return open(src).read() exceto IOError como exc: return str(exc) @app. route("/", métodos=["GET"]) def metric(): # 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: não 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) 

Alguém quer dar uma amostra de código ou url para isso? Eu sei que isso vai ser muito simples.