Flask:如何从模板目录提供静态文件?

时间:2012-12-22 10:51:28

标签: python flask jinja2

我正在使用Flask开发SAAS应用程序,我希望用户能够创建/上传/使用自己的自定义模板。这就是我目前的目录结构:

/flaskapp
    /application.py
    /static
        /style.css
    /templates (site & admin templates goes here)
        /hello.html
    /userdata
        /user1
            /template1
                 hello.html
            /template2
                 hello.html
        /user2
            /template1
                 hello.html
            /template2
                 hello.html

我可以使用通过此stackoverflow问题找到的解决方案来提供用户指定的模板:How to dynamically select template directory to be used in flask?但是如何从模板目录提供静态文件。而不是从/flaskapp/static/提供静态文件我想使用/flaskapp/userdata/<user>/<current-template>/static/目录提供静态文件,其中和将在运行时动态确定。怎么做?

2 个答案:

答案 0 :(得分:0)

据推测,你正在Flask面前使用网络服务器。解决此问题的一种方法(我通常在将Apache + mod_wsgi用于自定义WSGI应用程序时使用)是通过Web服务器直接从磁盘提供目录。在Apache上,我只是使用Alias指令。

如果要更改每个用户在给定URL下提供的文件,则必须通过Flask管道传输该文件。你必须弄清楚如何正确地路由请求;之后,您可以使用wsgi.file_wrapper发送正确的文件(虽然我不知道您是如何通过Flask获得的。)

答案 1 :(得分:0)

这是我用来从任何系统目录提供文件的。

应用程序在特定目录中搜​​索特定的请求文件:

当有人访问 http:/host/where/to/serve/files/example_file.txt 时,应用程序会尝试将 example_file.txt 作为附件返回,如果文件不存在它将返回404。

您可以调整此项并使用您的用户变量构建DIRECTORY_TO_SERVE_PATH。

如果您有任何限制,还应该验证要提供的文件,因为会返回路径中存在的任何文件

X=123 /bin/sh -c 'grep ","$X"$" xyz.txt | grep -v "^"$X","$X"$"'