Python Eve 提供给定文件夹中的静态文件
Python Eve serving static files from a given folder
我用 Eve 和 Python 构建了一个简单的 REST api。
from flask import redirect, send_from_directory, render_template
from eve import Eve
import os
PWD = os.environ.get('PWD')
public = os.path.join(PWD, 'public')
app = Eve(static_folder=public)
# serve index.html
@app.route('/')
def index():
return send_from_directory(public, 'index.html')
# start the app
if __name__ == '__main__':
app.run()
当请求 /
时,我只是从 /public
文件夹提供静态 HTML 文件。
我正在使用 bower 安装 bootstrap:
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/dist/css/bootstrap-theme.css">
但是问题是,虽然路径是正确的,但是找不到文件。
谁能解释一下为什么会这样?
显然我的 bower_components 的路径应该是 /public/bower_components/../../
我花了很长时间才弄明白这一点。您必须显式导入 send_from_directory
并使用 __name__
from eve import Eve
from flask import send_from_directory
app = Eve(__name__, static_folder="static")
@app.route('/')
def index():
return send_from_directory("static", 'index.html')
app.run()
然后在settings.py
:
URL_PREFIX="api"
静态文件传送:
http://127.0.0.1:5000/
http://127.0.0.1:5000/static/images/image.jpg
http://127.0.0.1:5000/static/css/style.css
API 调用:
http://127.0.0.1:5000/api/person/
我在另一个线程中发现了一个关于模板的问题,它也适用于静态文件:
template_folder = os.path.join(os.path.dirname(__file__), 'templates')
static_folder = os.path.join(os.path.dirname(__file__), 'static')
app = Eve(settings=settings, static_url_path='/static', template_folder=template_folder, static_folder=static_folder)
我用 Eve 和 Python 构建了一个简单的 REST api。
from flask import redirect, send_from_directory, render_template
from eve import Eve
import os
PWD = os.environ.get('PWD')
public = os.path.join(PWD, 'public')
app = Eve(static_folder=public)
# serve index.html
@app.route('/')
def index():
return send_from_directory(public, 'index.html')
# start the app
if __name__ == '__main__':
app.run()
当请求 /
时,我只是从 /public
文件夹提供静态 HTML 文件。
我正在使用 bower 安装 bootstrap:
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="bower_components/bootstrap/dist/css/bootstrap-theme.css">
但是问题是,虽然路径是正确的,但是找不到文件。
谁能解释一下为什么会这样?
显然我的 bower_components 的路径应该是 /public/bower_components/../../
我花了很长时间才弄明白这一点。您必须显式导入 send_from_directory
并使用 __name__
from eve import Eve
from flask import send_from_directory
app = Eve(__name__, static_folder="static")
@app.route('/')
def index():
return send_from_directory("static", 'index.html')
app.run()
然后在settings.py
:
URL_PREFIX="api"
静态文件传送:
http://127.0.0.1:5000/
http://127.0.0.1:5000/static/images/image.jpg
http://127.0.0.1:5000/static/css/style.css
API 调用:
http://127.0.0.1:5000/api/person/
我在另一个线程中发现了一个关于模板的问题,它也适用于静态文件:
template_folder = os.path.join(os.path.dirname(__file__), 'templates')
static_folder = os.path.join(os.path.dirname(__file__), 'static')
app = Eve(settings=settings, static_url_path='/static', template_folder=template_folder, static_folder=static_folder)