在Flask中访问嵌套静态文件夹的可能性
默认情况下,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