Flask:无法访问静态文件夹中的文件(404)

4
我希望使用Flask来提供React应用程序,但是“static_folder”似乎无法工作。这是我的非常简单的代码:
from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__, static_folder="react_app/build")
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return app.send_static_file("index.html")

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

在浏览器中,我可以访问 http://localhost:5000 并返回正确的 index.html。但是所有的静态文件如 css 和 js 文件都返回 404 错误。例如有一个文件:react_app/build/bundle.cssreact_app/build/js/some_name.js。但是输入 http://localhost:5000/bundle.csshttp://localhost:5000/js/some_name.js 都会返回 404 找不到错误。
从我的理解来看,如果我指定了 static_folder,我应该能够从根 URL 访问该文件夹中的所有文件。我错过或误解了什么?
2个回答

4
不,这不是文档所说的内容:
static_url_path - 可以用于在网络上指定静态文件的不同路径。默认为static_folder文件夹的名称。
static_folder - 包含应在static_url_path处提供服务的静态文件的文件夹。默认为应用程序根路径中的'static'文件夹。
因此,您的文件将在localhost:5000/react_app/build上提供服务。由于这可能不是您想要的,因此您应该传递static_url_path,其值为"static"之类的值,以便您可以在localhost:5000/static上找到文件。

2

我想补充一个重要的点。不要忘记添加static_url_path='',因为它会从URL中删除任何前面的路径(即默认的/static)。我在你的代码片段中没有看到这个。

例如:

 app = Flask (__name__,
            static_url_path='', 
            static_folder='web/static',
            template_folder='web/templates')
  • static_url_path=''将URL中的任何前置路径删除(即默认的/static)。
  • static_folder='web/static'用于将位于web/static文件夹中的任何文件作为静态文件提供。
  • template_folder='web/templates'同样地,这会更改模板文件夹。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接