Donc, c'est embarrassant. J'ai une application que j'ai jeté en Flask
et pour le moment c'est simplement de servir une seule page HTML statique avec quelques liens vers des CSS et JS. Et je ne trouve pas où dans la documentation Flask
décrit le retour des fichiers statiques. Oui, je pourrais l'utiliser render_template
mais je sais que les données ne sont pas templatized. J'aurais pensé send_file
ou url_for
était la bonne chose, mais je ne pouvais pas obtenir ces au travail. En attendant, je vais ouvrir les fichiers, la lecture du contenu, et le gréement d'un Response
avec appropriée, type mime:
import os.path
from flask import Flask, Response
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)
# Figure out how flask returns static files
# Tried:
# - render_template
# - send_file
# This should not be so non-obvious
return open(src).read()
except 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: no 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)
Quelqu'un veut donner un exemple de code ou d'une url pour cela? Je sais que cela va être simple.