无法从flask中的send_from_directory()检索文件

Rij*_*ain 16 python flask

我有一个引用这样的静态对象的html文件

<img src="img/snacks.png">
<link href="css/bluestrap.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

因此浏览器尝试调用此通道并且烧瓶无法执行此操作

http://127.0.0.1:5000/img/snacks.png  
Run Code Online (Sandbox Code Playgroud)

跨多个文件有很多这样的引用,因此无法更改引用.我如何从FLASK提供这些静态文件

我已将所有这些静态文件复制到'static'文件夹并尝试了这个

@app.route('/<path:filename>')  
def send_file(filename):  
      return send_from_directory('/static', filename)
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,有没有其他方法可以做到这一点?或者我做错了什么?

cod*_*eek 24

在生产中,您不希望使用flask服务器提供静态文件.我建议你使用合适的网络服务器来做到这一点.

对于dev,因为您不想使用url_for,您可以尝试初始化您的烧瓶应用程序,如下所示.这样,flask知道静态文件的位置.

app = Flask(__name__, static_folder='static')  

@app.route('/<path:filename>')  
def send_file(filename):  
    return send_from_directory(app.static_folder, filename)
Run Code Online (Sandbox Code Playgroud)

在Flask中查看包含大量信息静态文件的帖子 - robot.txt,sitemap.xml(mod_wsgi)


Sea*_*ira 7

如果您查看文档,send_from_directory就会发现它采用了将文件保存在磁盘上的目录的路径。除非您将图像文件保存在名为的根目录下static,否则您将要更新文件路径:

send_from_directory("/some/path/to/static", "my_image_file.jpg")
Run Code Online (Sandbox Code Playgroud)

话虽这么说,如果您将其用于承受任何负载的任何事情,最好确保Web服务器提供文件,而不是从应用程序提供静态文件。


dAn*_*jou 7

不要在生产中使用 Flask 的内置服务器。仅供开发使用!并且不要使用 Flask 来提供静态资产。很慢!在生产中,在 Flask 前面使用网络服务器,如 apache2、nginx 或 lighttpd。这些服务器能够重写 URL 并提供静态资产。

如何部署 Flask:http : //flask.pocoo.org/docs/deploying/

如何重写 URL:apache2nginxlighttpd