如何在Flask中覆盖静态文件处理器?

16 投票
1 回答
6182 浏览
提问于 2025-04-18 17:58

具体来说,我想知道如何给“静态”端点分配一个新的处理函数。我知道可以更改 static_folderstatic_path,但我特别想给路由映射中指向“静态”端点的任何网址请求分配一个不同的函数。我试过把一个空的 werkzeug.routing.Map 赋值给 <Flask app>.url_map,但没有成功——当我尝试 add_url_rule 时,仍然出现错误(“视图函数映射正在覆盖现有的端点函数:static”)。

提前谢谢你。

1 个回答

38

static_folder 设置为 None,这样 Flask 就不会注册这个视图了:

app = Flask(static_folder=None)

现在你可以自由创建你自己的视图了。

另外,你也可以让 static 视图使用一个不同的 URL 路径,并给你的替代视图一个不同的名称:

app = Flask(static_url_path='/flask_static')

@route('/static/<path:filename>')
def my_static(filename):
    # ...

Flask 总是会使用 static 作为它创建的视图的名称,所以上面的例子中使用了 my_static 作为替代。

撰写回答