所以这很尴尬。我在
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)
有人想给一个代码样例或url为这个?我知道这很简单。
首选的方法是使用nginx或另一个web服务器来服务静态文件;他们会比烧瓶更有效。
但是,您可以使用
from flask import Flask, request, send_from_directory
# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')
@app.route('/js/<path:path>')
def send_js(path):
return send_from_directory('js', path)
if __name__ == "__main__":
app.run()
不要将
from flask import Flask, request
# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')
@app.route('/')
def root():
return app.send_static_file('index.html')
如果您只是想移动静态文件的位置,那么最简单的方法就是在构造函数中声明路径。在下面的示例中,我已将模板和静态文件移动到名为
app = Flask(__name__,
static_url_path='',
static_folder='web/static',
template_folder='web/templates')
将在文件夹中找到的任何文件作为静态文件提供服务。/li>
类似地,这将更改模板文件夹。/li>
使用此方法,以下URL将返回CSS文件:
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
最后,这里是文件夹结构的一个快照,其中
你也可以,这是我最喜欢的,设置一个文件夹为静态路径,以便每个人都可以访问里面的文件。
app = Flask(__name__, static_url_path='/static')
通过该设置,您可以使用标准HTML:
<link rel="stylesheet" type="text/css" href="/static/style.css">