无法在Flask中使用Jinja传递变量

Sco*_*tt 0 python jinja2 flask

表单的操作将输入发送到名为soldfor的路由.我试图将变量ID传递给soldfor.当我点击提交按钮时,我收到此错误:

TypeError:soldfor()只取1个参数(给定0)

register_results.html的渲染:

return render_template('register_results.html', results=results, ID=ID)
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

soldfor路线:

@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'))
Run Code Online (Sandbox Code Playgroud)

Dan*_*fee 5

你需要改变这个:

<form role="form" method="POST" action="{{ url_for('soldfor', ID={{ ID }}) }}">

对此:

<form role="form" method="POST" action="{{ url_for('soldfor', ID=ID) }}">
Run Code Online (Sandbox Code Playgroud)

还来自文档:

在Flask中定义路径时,可以指定将转换为Python变量并传递给视图函数的部分.

@app.route('/user/<username>')
def profile(username):
    pass
Run Code Online (Sandbox Code Playgroud)

无论标记的URL部分是什么,都将作为username参数传递给视图.您还可以指定转换器,以便在将变量传递给视图之前对其进行过滤.

@app.route('/user/id/<int:user_id>')
def profile(user_id):
    pass
Run Code Online (Sandbox Code Playgroud)

您的错误是由期望参数的路由引起的,但您没有传入.您可能应该使用类似于上一个示例的内容来完成您尝试执行的操作.

如果您需要在不传递ID的情况下使用该URL,有时还需要将默认值传递给视图函数.一个例子看起来像这样:

@app.route('/user/id/<int:user_id>')
def profile(user_id=0):
    pass
Run Code Online (Sandbox Code Playgroud)