Как обслуживать статические файлы в Flask

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

Так что это смущает. У меня есть приложение, которое я собрал в Flask, и на данный момент оно просто обслуживает одну статическую HTML-страницу с некоторыми ссылками на CSS и JS. И я не могу найти, где в документации Flask описывает возврат статических файлов. Да, я мог бы использовать render_template, но я знаю, что данные не шаблонизированы. Я бы подумал, что send_file или url_for — это то, что нужно, но я не мог заставить их работать. Тем временем я открываю файлы, читаю содержимое и настройка Response с соответствующим mimetype:

import os.path from flask import Flask, Response app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # прагма: без покрытия return os.path.abspath(os.path.dirname(__file__)) def get_file(filename): # прагма: без покрытия try: src = os.path.join(root_dir(), filename) # Выяснить, как flask возвращает статические файлы # Пробовал: # - render_template # - send_file # Это не должно быть таким неочевидным return open(src).read(), кроме IOError as exc: return str(exc) @app. route("/", method=["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): # прагма: нет cover mimetypes = { ".css": "текст/css", ".html": "текст/html", ".js": "приложение/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) 

Кто-то хочет дать пример кода или URL для этого? Я знаю, что это будет очень просто.