在Flask中访问嵌套静态文件夹的可能性

1 投票
2 回答
2535 浏览
提问于 2025-04-18 05:32

默认情况下,Flask 只允许在静态文件夹中有一层文件夹嵌套。比如说:

->static <BR>
---->css <BR>
------->images<BR>

我们可以通过浏览器访问 css 目录里的文件。

例如:http://localhost:5000/static/css/file1.css

那么,我们要怎么通过浏览器访问 images 目录里的文件呢?

2 个回答

0

不太确定你在哪里看到Flask只允许一层嵌套。

你可以试试看。

我有一个目录 ./static/html/jobs.html,我可以通过这个网址 http://localhost:5000/static/html/jobs.html 来访问它。

1

Flask会根据你的静态文件路径(默认是/static)来设置静态文件的访问路径。这里的“静态文件”指的是一些不会改变的文件,比如图片、CSS样式表和JavaScript文件等。你可以在源代码中找到相关信息。

self.add_url_rule(self.static_url_path + '/<path:filename>',
    endpoint='static',
    view_func=self.send_static_file)

send_to_static这个函数会把这个路径分配给filename,也就是你要访问的文件名。

return send_from_directory(self.static_folder, filename,
    cache_timeout=cache_timeout)

如果你查看源代码中的send_from_directory函数,你会发现它只是用safe_join(directory, filename)来获取文件的完整路径。

safe_join这个函数的作用是处理路径,让它变得规范,并且会注意像..这样的特殊字符,以避免安全问题。

回到URL路由path可以匹配任何文本。它的工作方式类似于string,但它可以接受斜杠。这意味着你可以在静态文件夹中使用任意层级的嵌套。像/static/file.txt/static/p/a/t/h/t/o/file.txt这样的URL都可以正常工作。只要这些URL以你的静态路径开头,你想要的功能就可以直接使用:

http://localhost:5000/static/css/images/image1.png

撰写回答