我当前的工作目录是/home/mark/a/b
,我的镜像驻留在/home/mark/a/b/c/static
,即镜像的绝对路径是/home/mark/a/b/c/static/image.gif
。
我正在使用 python 函数send_static_file
通过GET
请求从端点返回图像。
我的问题是,为什么我不需要指定图像所在位置的完整路径,实际上我需要做的就是指定图像文件名,它能够检索图像并将其发送到浏览器?send_static_file
会自动搜索静态文件夹吗?
app = Flask(__name__, static_url_path='/static')
return app.send_static_file('image.gif')
如果我在卷曲端点时指定的不仅仅是图像文件名本身,则会导致下面显示错误。
{
"message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again. You have requested this URI [/event/email/] but did you mean /event/email/ or /event ?"
}
我看到一个帖子(第一个答案(在某种程度上回答了我的问题Flask:如何提供静态html?。但我不太确定他们说是什么意思,
static_url_path changes the URL static files are available at, not the location on the filesystem used to load the data from.
文件系统上的位置和 URL 静态文件之间有什么区别?
文件系统上的位置和 URL 静态文件之间有什么区别?
URL 路由不应与服务器文件系统上的路径一致。出于以下目的,您可以在Flask
应用初始化时指定static_url_path
和static_folder
参数:
static_url_path
- 可用于为 Web 上的静态文件指定不同的路径(来自 Flask 文档的说明(。 例如,您指定了一些网址前缀 对于您的服务器(例如 localhost:8000/some_prefix/...(,以便您的所有服务器路由都将在此前缀可用。在这种情况下,还应使用此前缀指定static_url_path
:some_prefix/静态static_folder
- 包含应在static_url_path
提供的静态文件的文件夹。默认为应用程序根路径中的"静态"文件夹(Flask 文档中的说明(。换句话说,它是服务器文件系统上包含静态文件的文件夹的路径。
我的问题是,为什么我不需要指定图像所在位置的完整路径,实际上我需要做的就是指定图像文件名,它能够检索图像并将其发送到浏览器?
因为Flask
将在static_folder
中搜索指定的文件,这是服务器文件系统上包含静态文件的文件夹的路径。