我有python代码,当某些条件不满足时,它会在控制台中注册一个错误。 当不满足必要条件时,我试图在浏览器中看到同样的错误。 为了举例说明,考虑一下add_stuff
函数中的基本思想,该函数检查输入是否为int
类型。 如果不是,则将错误打印到屏幕上。
下面简单的烧瓶应用程序和相应的模板文件工作,值错误实际上是打印在屏幕上的。 但是,我试图“漂亮地打印”错误,这样它就不会打印出难看的jinga2错误页面,而是保持在同一个math.html
页面上,将错误打印到屏幕上,或者可能重定向到一个吸引人的页面,而不是到处都是回溯等等。
from flask import Flask, render_template, request, session, current_app
server = Flask(__name__)
def add_stuff(x,y):
if isinstance(x, int) and isinstance(y, int):
z = x + y
return z
else:
raise ValueError("Not integers")
@server.route('/math')
def foo():
a = 1
b = 15
out = add_stuff(a,b)
return render_template('math.html', out=out)
if __name__ == '__main__':
server.run(debug=True)
这是一个模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{out}}
</body>
</html>
您可以捕获add_stuff
方法的异常,以停止显示Jinja2
错误页面。
在这里,我已经在flash
中包含了异常消息,并在模板中显示了它。 如果出现异常,我不会在模板中显示out
值。
from flask import Flask, flash, redirect, render_template, \
request, url_for
server = Flask(__name__)
server.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
def add_stuff(x,y):
if isinstance(x, int) and isinstance(y, int):
z = x + y
return z
else:
raise ValueError("Not integers")
@server.route('/math')
def foo():
a = 1
b = "some string"
out = None
try:
out = add_stuff(a,b)
except Exception as e:
flash(str(e))
if out is not None:
return render_template('math.html', out=out)
else:
return render_template('math.html')
math.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% if out %}
{{out}}
{% endif %}
</body>
</html>
输出:
您还可以根据要求对flash
消息进行分类(例如:错误,警告等)。 你可以在这里阅读官方文件。