【问题标题】:Python Eve serving static files from a given folderPython Eve 从给定文件夹提供静态文件
【发布时间】:2016-01-06 03:47:52
【问题描述】:

我用 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 安装引导程序:

<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 文件夹中,这就是奇怪的原因

标签: python flask eve


【解决方案1】:

我在另一个线程中发现了一个关于模板的问题,它也适用于静态文件:

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)

【讨论】:

  • 请告诉我们你的来源(另一个线程),也许那里还有其他有用的东西。如果它回答了问题,您还可以将此问题标记为重复并链接到您的来源。
【解决方案2】:

我花了很长时间才弄清楚这一点。您必须明确导入 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/

【讨论】:

    【解决方案3】:

    显然我的 bower_components 的路径应该是 /public/bower_components/../../

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 2014-06-06
      • 2017-08-25
      • 2020-08-08
      • 2023-03-18
      • 2019-09-19
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多