如何在Jinja Select中发送2个参数?

时间:2019-10-14 12:01:03

标签: flask flask-sqlalchemy

我无法通过skill_summary.html中的选择表格来传递2个参数(skill_id,score)。 在skill_summary.html中,分数在url_for中设置为2个常数,但是如何动态地将分数传递给update_skill?

routes.py

@app.route("/update_skill/<int:skill_id>/<int:score>", methods=['GET', 'POST'])
def update_skill(skill_id, score):
    skill = Skill.query.get_or_404(skill_id)
    skill.score = score
    db.session.commit()
    flash('Score has been updated!', 'success')
    return redirect(url_for('skill_summary'))

@app.route("/skill_summary")
def skill_summary():
    skills = Skill.query.all()
    return render_template('skill_summary.html', skills=skills)

skill_summary.html

<form action="{{ url_for('update_skill', skill_id=skill.id, score=1) }}" method='POST'>
  <select name="score">
    {% for score in range(6) %}
    <option value={{score}} {% if score==skill.score %} selected {% endif %}> {{score}} </option>
    {% endfor %}
  </select>
  <div>
    <input type="submit" value="Submit">
  </div>
</form>

如果我替换为

<form action="{{ url_for('update_skill', skill_id=skill.id, score=score)}}", class="form" method="POST">

在Web浏览器中显示以下错误。

jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'score' is undefined

2 个答案:

答案 0 :(得分:0)

像这样/update_skill/<int:skill_id>/<int:score>更新您的路线URL。我希望这会有所帮助。

答案 1 :(得分:0)

我在测试烧瓶行为时找到了解决方案。

在Jinja代码中,仅将skill_id值传递给update_skill

<form action="{{ url_for('update_skill', skill_id=skill.id) }}" method='POST'>
  <select name="score">
    {% for score in range(6) %}
    <option value={{score}} {% if score==skill.score %} selected {% endif %}> {{score}} </option>
    {% endfor %}
  </select>
  <div>
    <input type="submit" value="Submit">
  </div>
</form>

在update_skill中,仅使用request.form获取所选值。

@app.route("/update_skill/<int:skill_id>", methods=['POST'])
def update_skill(skill_id):
    skill = Skill.query.get_or_404(skill_id)
    skill.score = request.form["score"]
    db.session.commit()
    flash('Score has been updated!', 'success')
    return redirect(url_for('skill_summary'))