2017-09-18 12 views
0

J'essaie d'afficher plusieurs messages flash sur mon code HTML en utilisant flask pour toutes les erreurs qui pourraient survenir avec un formulaire de validation. En ce moment seulement un fait. Y a-t-il un moyen de faire cela? Peut-être avec une sorte de liste vide que les messages d'erreur vont dans, puis itérer à travers cette liste sur le côté html?Affichage de plusieurs messages flash avec un flacon

python:

@app.route("/user", methods=['POST']) 

def create_user(): 

    if len(request.form["name"]) < 1: 
     flash("Name cannot be blank") 
     return redirect("/") 
    else: 
     session["name"] = request.form["name"] 
     session["location"] = request.form["location"] 
     session["language"] = request.form["language"] 
    if len(request.form["comment"]) > 120: 
     flash("Comment cannot be longer than 120 characters") 
     return redirect("/") 
    elif len(request.form["comment"]) < 1: 
     flash("Comment cannot be blank") 
    else: 
     session["comment"] = request.form["comment"] 

    return redirect("/results") 

html:

{% with messages = get_flashed_messages() %} 
    {% if messages %} 
     {% for message in messages %} 
      <p>{{ message }}</p> 
     {% endfor %} 
    {% endif %} 
{% endwith %} 
<form action="/user" method="POST" accept-charset="utf-8"> 
    <label>Name:</label> 
    <div id=right> 
     <input type="text" name="name"> 
    </div> 
    <label>Location:</label> 
    <div id=right> 
     <select name="location"> 
     <option value="location1">Location 1</option> 
     <option value="location2">Location 2</option> 
     </select> 
    </div> 
    <label>Language:</label> 
    <div id=right> 
     <select name="language" > 
     <option value="choice1">Choice 1</option> 
     <option value="choice2">Choice 2</option> 
     </select> 
    </div> 
    <label>Comment (optional):</label> 
    <textarea name="comment" rows="5", cols="35"></textarea> 
    <button type="submit">Submit</button> 
</form> 

Répondre

2

Vous pouvez certainement afficher plusieurs messages flash, c'est le comportement par défaut. Le problème est que votre chemin de code n'autorise jamais plusieurs messages flash, car vous renvoyez un redirect immédiatement après l'appel à flash. Vous pouvez refactoriser votre code comme ceci:

@app.route("/user", methods=['POST']) 

def create_user(): 

    errors = False 

    if len(request.form["name"]) < 1: 
     flash("Name cannot be blank") 
     errors = True 
    else: 
     session["name"] = request.form["name"] 
     session["location"] = request.form["location"] 
     session["language"] = request.form["language"] 

    if len(request.form["comment"]) > 120: 
     flash("Comment cannot be longer than 120 characters") 
     errors = True 
    elif len(request.form["comment"]) < 1: 
     flash("Comment cannot be blank") 
     errors = True 
    else: 
     session["comment"] = request.form["comment"] 

    if errors: 
     return redirect("/") 
    else: 
     return redirect("/results") 
+0

Oh, ouah! Ouais, c'est parfaitement logique, et un joli moment pour comprendre que rediriger si rapidement empêcherait ces messages flash. Je vois ce que vous avez fait avec les erreurs et redirige ensuite vers n'importe quelle page basée sur celles-ci. Merci beaucoup! –