2017-09-18 15 views
0

私は、HTML形式のフラスコに、検証フォームでエラーが発生している可能性があるため、複数のフラッシュメッセージを表示しようとしています。今はただ一つしかありません。これを行う方法はありますか?恐らく、何らかの種類の空白のリストがあると、エラーメッセージが入り、html側のリストを反復するでしょうか?フラスコで複数のフラッシュメッセージを表示する

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

答えて

2

あなたは間違いなく、複数のフラッシュメッセージを表示することができ、これはデフォルトの動作です。問題は、flashへの呼び出し後すぐにredirectを返すので、コードパスで複数のフラッシュメッセージが許可されないことです。あなたは次のようにコードをリファクタリングすることができます:

@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

ああ、うわー!ええ、完璧な意味合いがあります。リダイレクトをすばやく呼び出すと、そのようなフラッシュメッセージが表示されないことに気づくかなりの時間です。私はあなたがエラーで何をしたのかを見て、それらのページに基づいていずれかのページにリダイレクトします。どうもありがとうございました! –

関連する問題