【问题标题】:How do i create custom endpoint for jinja Undefined error?如何为 jinja 未定义错误创建自定义端点?
【发布时间】:2019-08-28 20:17:43
【问题描述】:

我不知道为什么,但是我的 404 错误处理程序没有运行,并且我的 webapp 将任何页面视为存在,是什么使它抛出 jinja2.exceptions.UndefinedError 而不是正常的 404 错误。

如何为 jinja2.exceptions.UndefinedError 制作错误处理程序?

我已经尝试过创建几个 404 端点,但似乎都没有工作。

【问题讨论】:

  • 欢迎来到stackoverflow。我们非常愿意帮助您,但为此您必须提供尽可能多的信息,以便我们准确了解您的问题并提供最佳解决方案。因此,例如,您可以发布生成您描述的错误的代码,并从您的控制台捕获回溯...

标签: python flask error-handling jinja2


【解决方案1】:

jinja2.exceptions.UndefinedError 返回 HTTP 500 错误:

Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)

根据 Flask 文档(参考 1):

在以下情况下不会使用“500 Internal Server Error”的处理程序 在调试模式下运行。相反,交互式调试器将是 显示。

这表明,如果我们在调试模式 (debug=True) 下运行应用程序,@app.errorhandler(500) 将不会捕获 HTTP 500 或内部服务器错误的错误处理程序。

这是一个示例,说明如何在调试模式为 false 时使用自定义错误处理程序捕获 jinja2.exceptions.UndefinedError

app.py:

from flask import Flask, render_template


app = Flask(__name__)

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('custom_error_handler.html', error_code=500), 500

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

@app.route('/', methods = ['GET'])
def home():
    return render_template("home.html")

if __name__ == '__main__':
    app.run(debug=False)

home.html:

<html>
    <head>
        <title>Home</title>
    </head>
    <body>
        <h1>Data</h1>
        {{ data+student }}
    </body>
</html>

custom_error_handler.html:

<h3>Custom Error Page</h3>
{{ error_code }}

输出:

  • 处理 500 错误

  • 处理 404 错误

参考资料:

  1. Flask Official documentation on error handling

【讨论】:

  • 1) 我不知道为什么,但它仍然拒绝工作。虽然我添加了错误处理函数和模板,但它给我的是默认的,而不是我的。 2)它会抛出 500 错误,尽管它应该抛出 404 一个
  • @wikwoj,你设置debug=False了吗? jinja2.exceptions.UndefinedError 是服务器错误。这就是它抛出 500 的原因。但正如答案中所示,您可以将 500 错误页面覆盖为自定义页面。
猜你喜欢
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2019-09-23
  • 2022-08-22
  • 2018-08-12
  • 1970-01-01
  • 2015-12-29
  • 2021-10-29
相关资源
最近更新 更多