你怎么能找不到"页面#34;功能使用Flask?

时间:2014-08-13 15:20:30

标签: python web flask jinja2

如果您访问不存在的网站的子网址,请说 http://www.reddit.com/notathing

它将带您进入一个带有华丽图形的自定义网站,以及轻松链接以重新回到正轨。

Vanilla Flask将显示

Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

如何创造一个"全能"网页使用Flask来解决用户错误,例如这个?

2 个答案:

答案 0 :(得分:4)

有关Error Handlers的文档中对此进行了描述。使用@app.errorhandler()而不是@app.route()来装饰视图会将其视为给定类型错误的视图。在您的情况下,404处理程序可能如下所示:

@app.errorhandler(404)
def not_found(e):
    cool_image = pick_cool_image()
    return render_template('404_not_found.html', image=cool_image)

现在404_not_found.html模板可以使用您在处理程序中选择的酷图像来显示一个有趣的页面。

您可以通过这种方式处理任何错误状态代码,但您也可以处理原本会导致500错误的Python异常。通过这种方式,您可以制作特定于错误类型的非常详细的错误页面。例如:

class NotModeratorError(Exception):
    pass

@app.errorhandler(NotModeratorError)
def not_a_moderator(e):
    return render_template('errors/not_a_moderator.html')

@app.route('/mod_powers')
def mod_powers():
    if not current_user.is_moderator:
        raise NotModeratorError()

答案 1 :(得分:2)

来自documentation

from flask import render_template

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