我无法通过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
答案 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'))