我正在构建一个Flask应用程序,当我创建一个fee_handler路线时,即使我过去已经构建了这样的应用程序,我仍然会遇到错误。 我不确定这是什么问题。
@app.route('/handle_form', methods=['POST', 'GET'])
def fee_handler():
if request.method == "POST":
x = request.form['x']
y = request.form['y']
z = request.form['z']
a = request.form['a']
fee.feeCreation(x, y, z, a)
return render_template('result.html', x=x, y=y, z=z, a=a)
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
如果将返回值移动到与if
一致,则会收到局部变量错误。
答案 0 :(得分:2)
在这种情况下,最好创建两条路径:一条用于服务表单,另一条接收值并将其呈现给用户:
@app.route('/enter_values', methods=['GET'])
def enter_values():
return flask.render_template('form_html.html')
@app.route('/handle_form', methods=['POST'])
def fee_handler():
x = request.form['x']
y = request.form['y']
z = request.form['z']
a = request.form['a']
fee.feeCreation(x, y, z, a)
return render_template('result.html', x=x, y=y, z=z, a=a)
在form_html.html
模板中,确保表单action
的参数指向/handle_form
:
<form method='POST' action = '/handle_form'>
...
</form>
答案 1 :(得分:1)
假设请求方法为GET
,因为您什么都不返回?当然,如果您尝试返回x, y, z and a
语句范围之外的变量if
,将导致错误提示,因为它们将不会被定义。
答案 2 :(得分:1)
使用默认值,然后将您的return语句推入if条件之外。
例如:
@app.route('/handle_form', methods=['POST', 'GET'])
def fee_handler():
x, y, z, a = None, None, None, None
if request.method == "POST":
x = request.form['x']
y = request.form['y']
z = request.form['z']
a = request.form['a']
fee.feeCreation(x, y, z, a)
return render_template('result.html', x=x, y=y, z=z, a=a)