Как отправить 2 аргумента в Jinja Select? - PullRequest
0 голосов
/ 14 октября 2019

Я не могу направить 2 аргумента (skill_id, Score) по форме выбора в skill_summary.html. Здесь в skill_summary.html для счетчика установлено постоянное значение 2 в url_for, но как я могу динамически передать счет, выбранный для update_skill?

rout.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">

В веб-браузере отображается следующая ошибка.

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

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Я нашел решение при тестировании поведения колбы.

В коде 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'))
0 голосов
/ 14 октября 2019

Обновите URL вашего маршрута следующим образом: /update_skill/<int:skill_id>/<int:score>. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...