2017-10-01 1 views
0

Je veux passer le {{ exam[0] }} sélectionné à la fonction show_exam_form. Cependant, je ne pouvais pas faire ça.Comment puis-je inclure la valeur du formulaire dans la fonction url_for du modèle jinja?

Environnement

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> 

Comment puis-je résoudre?
S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations pour le résoudre.
Merci!

Répondre

0

Je n'ai pas besoin d'envoyer l'exam_id de jinja à Flask.
Envoyez simplement via POST et récupérez-le avec request.form ['exam_id'] dans la fonction show_exam_form.

1

La demande de l'identifiant en tant que paramètre n'est pas nécessaire. Voici un exemple de gestion de cette valeur sélectionnée pour les prochains OP.

Dans app.py:

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

Dans modèle so.html (dans mon cas il étend une templete de base):

{% 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 %} 

sortie:

Input Form Figure 1: Formulaire d'entrée

enter image description here Figure 2: Clignotement de la valeur sélectionnée

+1

Oui! J'ai remarqué que ce n'est pas nécessaire après la publication. Mais vous me donnez le bon exemple. Je vous remercie!!! – tekun