在我的网站上,我希望能够为用户提供比“未找到页面”更好的404错误反馈。如果视图引发404错误,我想将一个额外的参数传递给描述视图显示内容的模板。例如:
views.朋友
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
,那么模板会说,例如,“Project not found”而不仅仅是“找不到页面”。
做这个的最好方式是什么?
errorhandler
路线already has和error
争论。当你打电话给abort()
时,Flask投掷了一个HTTPException
,errorhandler
正在等待。这里的主要思想是您可以创建自己的异常层次结构或具有不同属性的一个异常,并在errorhandler
模板中使用它。
第二个想法是使用flashing:例外,flash
消息和abort()
,然后在你的errorhandler
模板中接收此消息。