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

如何在Flask中添加404页面未找到的跳转处理?

Flask应用工厂模式下配置404错误页面

在应用工厂模式中,直接用@app.errorhandler(404)装饰器注册错误处理器不会生效——因为装饰器在模块加载时执行,而此时create_app函数内的Flask实例还未创建,无法完成绑定。正确的做法是在create_app内部完成错误处理器的注册:

解决方案1:在create_app函数内定义并注册错误处理器

修改你的create_app函数,在创建完app实例并注册路由后,添加404错误处理逻辑:

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings')

    # 注册现有路由
    app.add_url_rule('/', view_func=views.home_page)
    app.add_url_rule('/login', view_func=views.login_page, methods=['GET', 'POST'])
    app.add_url_rule('/logout', view_func=views.logout_page)
    app.add_url_rule('/movies', view_func=views.movies_page, methods=['GET', 'POST'])
    app.add_url_rule('/movie/<int:movie_key>', view_func=views.movie_page)
    app.add_url_rule('/new-movie', view_func=views.movie_add_page, methods=['GET', 'POST'])

    # 注册404错误处理器
    from flask import render_template
    def page_not_found(e):
        return render_template('404.html'), 404
    
    app.errorhandler(404)(page_not_found)

    return app

解决方案2:外部定义错误处理函数,在create_app内注册

如果想把错误处理函数和视图函数放在一起(比如views.py),先在views.py中定义函数:

# views.py
from flask import render_template

def page_not_found(e):
    return render_template('404.html'), 404

然后在create_app中导入并注册:

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings')

    # 注册现有路由...

    # 导入并注册错误处理器
    from .views import page_not_found
    app.errorhandler(404)(page_not_found)

    return app

注意事项

  • 确保404.html模板存在于项目的templates目录下,否则会触发500服务器错误;
  • 错误处理函数必须接收一个参数(通常命名为e),用于接收错误对象。

内容的提问来源于stack exchange,提问作者Virbes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:45:34