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

时间:2017-08-09 13:14:11

标签: python flask http-status-code-404 static-files

我想用烧瓶提供反应应用程序,但“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.css react_app / build / js / some_name.js 。但是输入 http://localhost:5000/bundle.css http://localhost:5000/js/some_name.js 都会返回404未找到的错误。

根据我的理解,如果我指定一个static_folder,我应该从根URL访问该文件夹中的所有文件。我错过了什么/误解了什么?

2 个答案:

答案 0 :(得分:1)

不,那不是the documentation所说的:

  
      
  • static_url_path - 可用于为Web上的静态文件指定其他路径。默认为 static_folder 文件夹的名称。
  •   
  • static_folder - 包含应在static_url_path中提供的静态文件的文件夹。默认为'静态'应用程序根路径中的文件夹。
  •   

因此,您的文件将在localhost:5000 / react_app / build中提供。由于这可能不是您想要的,您也应该传递static_url_path,其值为" static",以便您可以在localhost:5000 /找到这些文件静态的。

答案 1 :(得分:1)

只想添加一个重点。不要忘记添加 static_url_path ='',因为它会从URL中删除所有先前的路径(即默认的/ static)。我在您的代码段中都没有看到这一点。

例如,

 app = Flask (__name__,
            static_url_path='', 
            static_folder='web/static',
            template_folder='web/templates')
  • static_url_path =''从网址中删除所有先前的路径(即 默认为/ static)。
  • static_folder ='web / static'服务于找到的所有文件 在web / static文件夹中作为静态文件。
  • template_folder ='web / templates'同样,这会更改模板 文件夹。