表单的操作将输入发送到名为soldfor的路由。我试图将变量ID传递给soldfor。当我点击提交按钮时,我收到此错误:
TypeError:soldfor()只需1个参数(0给定)
呈现register_results.html:
return render_template('register_results.html', results=results, ID=ID)
register_results.html:
<form role="form" method="POST" action="{{ url_for('soldfor', ID={{ ID }}) }}">
<div class="input-group">
<input type="number" class="form-control" placeholder="Sold For" autocomplete="off" name="soldfor">
<span class="input-group-btn">
<button class="btn btn-default" name="soldfor" value="soldfor" type="submit">Sell!</button>
</span>
</div>
</form>
soldfor Route:
@app.route("/soldfor", methods=["POST"])
def soldfor(ID):
soldfor = request.form['soldfor']
print(soldfor)
g.db = connect_db()
g.db.execute("UPDATE yardsale SET SF = ? WHERE ID = ?", (soldfor, ID,))
g.db.commit()
g.db.close()
return redirect(url_for('index'))
答案 0 :(得分:5)
你需要改变这个:
<form role="form" method="POST" action="{{ url_for('soldfor', ID={{ ID }}) }}">
到此:
<form role="form" method="POST" action="{{ url_for('soldfor', ID=ID) }}">
同样来自文档:
在Flask中定义路径时,可以指定其中的部分路径 将转换为Python变量并传递给视图 功能
@app.route('/user/<username>')
def profile(username):
pass
标记的网址中的任何内容都将被传递 视图作为用户名参数。您还可以指定转换器 在变量传递给视图之前过滤变量。
@app.route('/user/id/<int:user_id>')
def profile(user_id):
pass
您的错误是由期望参数的路由引起的,但您没有传入。您应该使用类似于最后一个示例的内容来完成您尝试执行的操作。
如果您需要在不传递ID的情况下使用该URL,有时还需要将默认值传递给视图函数。一个例子如下:
@app.route('/user/id/<int:user_id>')
def profile(user_id=0):
pass