将参数传递给Flask错误处理器
在我的网站上,我希望能给用户提供比“页面未找到”更好的404错误反馈。如果某个视图出现404错误,我想给模板传递一个额外的参数,描述这个视图显示的内容。例如:
views.py
def get_or_404(model, attribute, value, template, **kwargs):
try:
return session.query(model).filter(attribute == value).one()
except NoResultFound:
abort(404)
@app.errorhandler(404)
def page_not_found(error):
return render_template("404.html"), 404
@app.route("project/<project_id>")
def project_show(project_id):
"""
Show the files contained in a specific project.
:param int project_id: The ID of the desired project.
"""
project = get_or_404(Project, Project.id, project_id, "item_not_found.html", item="project")
# Other stuff
如果用户尝试访问一个不存在的项目,他们就会被引导到一个404页面。如果我能把item
这个参数(来自project_show
)传递给模板404.html
,那么模板就可以显示,比如“项目未找到”,而不仅仅是“页面未找到”。
那么,最好的做法是什么呢?
1 个回答
4
在Flask中,errorhandler
路由已经有一个error
参数。当你调用abort()
时,Flask会抛出一个HTTPException
,而errorhandler
正是用来处理这个异常的。这里的主要意思是,你可以创建自己的异常类型,或者创建一个带有不同属性的异常,并在你的errorhandler
模板中使用它。
第二个想法是使用闪现消息:在发生异常时,使用flash
发送一条消息,然后调用abort()
,接着在你的errorhandler
模板中获取这条消息。