2017-10-01 10 views
0

選択した{{ exam[0] }}show_exam_form関数に渡したいとします。 しかし私はそれをすることができませんでした。私はそれを解決するにはどうすればよいjinjaテンプレートのurl_for関数にフォーム値を含めるにはどうすればいいですか?

環境

Python 3.6.1 
Flask==0.12.2 
Jinja2==2.9.6 

app.py

@app.route('/exam/<int:exam_id>', methods=['POST']) 
def show_exam_form(exam_id): 
    print(exam_id) 

HTML

<form action="{{ url_for('show_exam_form', exam_id=exam_id) }}" method='POST'> 
    <select name=exam_id> 
    {% for exam in exams %} 
    <option value="{{exam[0]}}">{{exam[1]}}</option> 
    {% endfor %} 
    </select> 


解決のための詳細情報が必要な場合はお知らせください。
ありがとうございます!

答えて

0

jinjaのexam_idをFlaskに送信する必要はありません。
POST経由で送信し、show_exam_form機能のrequest.form ['exam_id']で取得してください。

1

idをパラメータとして要求する必要はありません。将来のOPでこの選択された値を処理する方法の例を次に示します。 app.py

{% extends "layout.html" %} 
{% block content %} 
    <form action="{{ url_for('show_exam_form') }}" class="form" method='POST'> 
     <div class="form-group"> 
      <select name="exam_id" class="form-control"> 
       {% for key,value in exams.items() %} 
        <option value="{{ key }}">{{ value }}</option> 
       {% endfor %} 
      </select> 
     </div> 
     <input type="submit" class="btn btn-primary" value="Submit"> 
    </form> 
{% endblock %} 

出力:

Input Form 図1:入力フォーム

so.htmlテンプレートに

@app.route('/exam', methods=['GET','POST']) 
def show_exam_form(): 
    exams = { 
     "IT-101":"IT Fundamentals", 
     "IT-201": "Object Oriented Programming", 
     "IT-301": "Database Management", 
     "IT-401": "Operating Systems" 
    } 
    if request.method == "GET": 
     return render_template('so.html', exams = exams) 
    else: 
     exam_id = request.form["exam_id"] 
     flash(exam_id) 
     return render_template('so.html', exams = exams) 

が(私の場合、それはベースtempleteを拡張)

enter image description here 図2:選択した値の点滅

+1

はい!私はポストの後にそれが必要でないことに気づいた。しかし、あなたは私に素晴らしい例を与えます。ありがとうございました!!! – tekun