在我的网站上,我希望能够向用户提供有关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
kwarg(来自project_show
)提供给模板404.html
,那么模板会说,例如,“找不到项目”,而不仅仅是“未找到页面”
这样做的最佳方式是什么?
答案 0 :(得分:3)
errorhandler
路由already has和error
参数。当您致电abort()
时,Flask会抛出HTTPException
,errorhandler
正在等待。这里的主要想法是您可以创建自己的异常层次结构或具有不同属性的一个例外,并在errorhandler
模板中使用它。
第二个想法是使用flashing:异常,flash
一条消息和abort()
,然后在errorhandler
模板中选择此消息。