如何在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
相关产品推荐
相关产品推荐

