You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Flask单个Blueprint绑定专属错误处理程序?

为单个Flask Blueprint绑定专属错误页面

嘿,我完全懂你的困扰——app_errorhandler确实是全局生效的,不管请求属于哪个蓝图都会触发。不过Flask早就为蓝图准备了专属的错误处理方式,用它就能实现单个蓝图的专属错误页面啦!

核心解决方案:使用蓝图的errorhandler装饰器

别再用app_errorhandler了,直接在你想要绑定专属错误页面的蓝图(比如front_blueprint)里,使用蓝图自身的errorhandler装饰器定义错误处理函数。这个处理函数只会响应该蓝图管辖范围内的请求,哪怕你的蓝图url_prefix是"/"也没问题——Flask会根据路由归属(以及你配置的子域名)自动判断该用哪个错误处理逻辑。

示例代码

比如给front_blueprint绑定专属404页面:

from flask import render_template

# 在front_blueprint的定义文件中添加以下代码
@front_blueprint.errorhandler(404)
def front_404(error):
    # 返回该蓝图专属的404模板和状态码
    return render_template('front/404.html'), 404

同样的,你也可以给另外两个蓝图分别绑定它们的专属错误处理:

# admin蓝图的404错误处理
@admin_blueprint.errorhandler(404)
def admin_404(error):
    return render_template('admin/404.html'), 404

# mobile蓝图的404错误处理
@mobile_blueprint.errorhandler(404)
def mobile_404(error):
    return render_template('mobile/404.html'), 404

为什么这能生效?

因为你给每个蓝图配置了不同的子域名(www、admin、mobile),Flask会自动识别请求的子域名,将其路由到对应的蓝图。而蓝图的errorhandler只会处理该蓝图路由下的错误请求,完全不会干扰其他蓝图的错误处理逻辑。

哪怕多个蓝图的url_prefix都是"/",只要子域名不同,它们的错误处理就是完全独立的——比如www.example.com下的404会触发front_blueprint的错误页面,admin.example.com下的404则会显示admin_blueprint的专属页面。

补充说明

  • 如果某个请求不属于任何蓝图的路由(比如直接在app上注册的全局路由),才会触发全局的app_errorhandler(如果有的话)。
  • 除了404,你也可以用同样的方式处理其他错误码(比如500、403等),只需要把装饰器里的错误码换成对应的数值即可。

内容的提问来源于stack exchange,提问作者Mad-Hades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:10:58