【问题标题】:Can't pass a variable with Jinja in Flask无法在 Flask 中使用 Jinja 传递变量
【发布时间】:2015-08-28 20:28:49
【问题描述】:

表单的操作将输入发送到名为 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>

为路线出售:

@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'))

【问题讨论】:

标签: python flask jinja2


【解决方案1】:

你需要改变这个:

&lt;form role="form" method="POST" action="{{ url_for('soldfor', ID={{ ID }}) }}"&gt;

到这里:

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

也来自文档:

当你在 Flask 中定义一个路由时,你可以指定它的一部分 将转换为 Python 变量并传递给视图 功能。

@app.route('/user/<username>')
def profile(username):
    pass

URL 部分中的任何内容都将通过 到视图作为用户名参数。您还可以指定转换器 在变量传递到视图之前对其进行过滤。

@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

【讨论】:

    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2023-01-29
    • 2015-09-27
    • 2022-01-16
    • 2018-03-05
    相关资源
    最近更新 更多