Vì vậy, điều này là xấu hổ. Tôi đã có một ứng dụng mà tôi đã sử dụng cùng nhau Flask
và hiện tại nó chỉ đang phục vụ một trang HTML tĩnh duy nhất với một số liên kết đến CSS và JS. Và tôi không thể tìm thấy nơi trong tài liệu Flask
mô tả trả về các tệp tĩnh. Có, tôi có thể sử dụng render_template
nhưng tôi biết dữ liệu không phải là templatized. Tôi đã nghĩ send_file
hoặc url_for
là điều đúng đắn, nhưng tôi không thể làm cho chúng hoạt động được. Trong thời gian chờ đợi, tôi đang mở các tệp, đọc nội dung và xử lý một mô hình Response
phù hợp:
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)
Ai đó muốn đưa ra một mẫu mã hoặc url cho việc này? Tôi biết điều này sẽ trở nên đơn giản.