2017-10-01 2 views
0

선택한 {{ exam[0] }}show_exam_form 함수에 전달하고 싶습니다. 그러나 나는 그것을 할 수 없었다.jinja 템플릿의 url_for 함수에 양식 값을 포함하려면 어떻게해야합니까?

환경

Python 3.6.1 
Flask==0.12.2 
Jinja2==2.9.6 

<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> 

내가 그것을 어떻게

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

을 app.py를 해결할 수있는 HTML

?
해결 방법에 대한 자세한 정보가 필요하면 알려주십시오.
감사합니다 !!!

답변

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