Python 无法从flask中的发送目录()检索文件

Python 无法从flask中的发送目录()检索文件,python,flask,Python,Flask,我有一个html文件,它引用这样的静态对象 <img src="img/snacks.png"> <link href="css/bluestrap.css" rel="stylesheet"> 在多个文件中有许多这样的引用,因此不可能更改引用。如何从FLASK提供这些静态文件 我已将所有这些静态文件复制到“静态”文件夹,并尝试了此操作 @app.route('/<path:filename>') def send_file(filename):

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

<img src="img/snacks.png">
<link href="css/bluestrap.css" rel="stylesheet">
在多个文件中有许多这样的引用,因此不可能更改引用。如何从FLASK提供这些静态文件

我已将所有这些静态文件复制到“静态”文件夹,并尝试了此操作

@app.route('/<path:filename>')  
def send_file(filename):  
      return send_from_directory('/static', filename)
@app.route(“/”)
def发送文件(文件名):
从_目录('/static',filename)返回send_

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

在生产环境中,您不希望使用flask服务器提供静态文件。我建议您使用适当的web服务器来完成这项工作

对于开发人员,由于您不想对使用
url\u,您可以尝试如下初始化flask应用程序。这样,flask就知道静态文件在哪里

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

@app.route('/<path:filename>')  
def send_file(filename):  
    return send_from_directory(app.static_folder, filename)
app=Flask(\uuuuu name\uuuuuuu,static\u folder='static'))
@应用程序路径(“/”)
def发送文件(文件名):
从目录返回发送目录(app.static文件夹,文件名)
看到这篇文章有很多信息

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

send_from_directory("/some/path/to/static", "my_image_file.jpg")

也就是说,如果您将此应用程序用于任何负载下的任何内容,最好确保您的web服务器提供这些文件,而不是提供应用程序中的静态文件。

不要在生产中使用Flask的内置服务器。这只是为了发展!不要使用烧瓶来提供静态资产。太慢了!在生产中,在烧瓶前面使用Web服务器,如apache2、nginx或lighttpd。这些服务器能够重写URL并为静态资产提供服务

如何部署Flask:


如何重写URL:,。

我认为更好的方法是:

import flask

# ...

@app.route('/img/<fname>')
def legacy_images(fname):
    return flask.redirect(flask.url_for('static', filename='img/' + fname), code=301)
导入烧瓶
# ...
@应用程序路径(“/img/”)
def旧版_图像(fname):
return flask.redirect(flask.url_表示('static',filename='img/'+fname),code=301)
这将永久重定向到正确的URL,而不是将文件发送到两个不同的位置。正如其他人所说,直接使用nginx或Apache提供静态文件也是一个好主意。

您应该在代码中删除“/”之前的“/”静态文件:

send_from_directory('/static', filename)
将其更改为:

send_from_directory('static', filename)
但是,在某些环境中,服务器本身不允许在静态文件夹/目录上运行此命令。因为它被设置为静态文件服务器。例如,使用google cloud,您应该在静态文件夹旁边构建一个名为tmp的目录,然后使用tmp文件夹执行send_from_directory命令:


图像/css文件的引用太多,无法使用url_函数更改它们,这就是我不想更改它们的原因。有没有办法不更改html文件并仍然从python提供它们?使用“main”blueprint无法使用itFlask
url\u for
使用
“static”
已经从目录调用
send\u
,我不明白你的意思。对我来说,一个警告是确保
filename
实际上只是一个文件名,而不是子目录中文件的路径。静态文件夹也可以手动指定,但必须是绝对路径。使用
os.path.realpath()
获取它。我的文件存储在名为“static”的根目录中名为“img”的文件夹中,因此有效地将其存储在static/img/snakts.png中,浏览器调用@RijulJain-是,但该目录是否位于磁盘上的
/static
?也就是说,它是否在您的文件系统(不是您的Web服务器根目录)的
/
下的
usr
等旁边?它在我的Web服务器根目录中,我如何给出相对于我的Web服务器根目录的路径?
send_from_directory('static', filename)
return(send_from_directory('tmp', filename))