4

通常,问题是如何在开发环境中提供静态文件,而在我的情况下恰恰相反。因此,我使用 Apache 和 mod_wsgi 部署了一个 Flask 应用程序,将 Apache 配置为在 /static url 处提供我的静态文件。现在我不确定这些文件是由 Apache 还是由 Flask 提供的,因为默认情况下,flask 也使用相同的静态路径。

在模板中我使用 url_for("static", filename="style.css")。它工作正常。但这就是问题所在,因为我不知道什么在为我的静态文件提供服务。当然,如果我将每个模板更改为具有硬编码路径以及与默认 Flask 不同的内容,我可以确定 Apache 正在提供服务,但这听起来不是正确的解决方案。

所以总结一下我的问题:如何在 Flask(模板)中使用 url_for(static) 并确保 Flask 没有为我服务?

谢谢,拉波拉斯K。

4

2 回答 2

6
  1. 设置另一个静态文件夹(您还需要在文件系统上创建空文件夹):

    app = Flask(__name__, static_url_path='static', static_folder='static_test')
    

    因此,如果您得到 404,则文件由烧瓶提供服务,否则为 apache。

  2. 添加测试文件夹并将 apache 映射为静态文件夹。

    因此,如果您从 test 文件夹中获取内容,那么文件将由 apache else flask 提供。

  3. 中断任何static端点请求:

    @app.before_request
    def break_static():
        if request.endpoint == 'static':
            abort(404)
        return None
    

    或者

    class YourApp(Flask):
        def send_static_file(self, filename):
            abort(404)
    

    因此,如果您得到 404,则文件由 flaks else apache 提供。

但是如果你真的不确定,你就足够一次测试这个案例了。如果 apache 配置不会改变,那么静态服务行为也不会改变。

于 2013-05-16T22:06:20.863 回答
0

只要你有这个,你就可以确定:

if __name__ == '__main__':
    app.run()

app.run() 调用实际上启动了本地开发服务器。在生产中,您将/不应该调用它,因此开发人员无法提供任何服务。服务器,因为它从未启动。

于 2013-05-16T19:38:48.137 回答