【问题标题】:Possibility of accesing Nested Static Folder in Flask [duplicate]在 Flask 中访问嵌套静态文件夹的可能性 [重复]
【发布时间】:2014-05-06 13:11:37
【问题描述】:

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

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

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

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

如何通过浏览器访问images目录下的文件?

【问题讨论】:

    标签: python python-2.7 flask


    【解决方案1】:

    Flask 使用您的静态路径(默认为/static)和任何文本设置静态文件的路由。来自source

    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)
    

    如果您查看source 中的send_from_directory,您会发现它只是使用safe_join(directory, filename) 来获取文件的路径。

    safe_join 本身只是做一些工作来规范路径并注意文件名中的 .. 之类的东西。

    回到URL routepath 匹配任何文本。就像string 一样,除了它接受斜线。这意味着您可以在静态文件夹中使用任何级别的嵌套。像 /static/file.txt/static/p/a/t/h/t/o/file.txt 这样的 URL 都可以使用。只要 URL 以您的静态路径开头,您想要的行为开箱即用:

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

    【讨论】:

      【解决方案2】:

      不确定,你在哪里可以找到,Flask 只允许一层嵌套。

      试试吧。

      我有目录 ./static/html/jobs.html,我在 url http://localhost:5000/static/html/jobs.html 上得到这个服务。

      【讨论】: