2016-04-12 7 views
0

フラスコとwtformを使用しています。ユーザーがフォームの送信ボタンをクリックすると、送信が成功したというメッセージが表示されます。そのために、Falseのデフォルト値を持つフラスコ経路のパラメータがあります。ユーザーが送信するとき、私はそれが真実であることを望んでいるので、ページを再レンダリングするとき、「成功」と言っている余分なビットをユーザーに示すことを知っています。しかし、このパラメータは常に偽と思われます。私のpythonはフラスコルーティングパラメータが間違っています

@app.route('/myPage', methods=['GET', 'POST']) 
def myPage(success=False): 
    print success 

    form = MyForm() 
    if form.validate_on_submit(): 
     print "did validate" 
     return redirect(url_for('myPage', success=True)) 

    return render_template('/MyPage.html', form=form, success=success) 

、のようになります。そして、私のHTMLは、私のpythonとHTMLリダイレクトの両方で

... 
{% if success %} 
    <div class="alert alert-success alert-dismissable"> 
     <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> User added 
    </div> 
{% endif %} 
... 
<form method="POST" action="{{ url_for('register', success=True) }}"> 
... 

、のように見える、私は真実であると成功を設定してみてください、しかし、それらのない組み合わせが動作するようには思えません。私が「成功を印刷する」とき、それは常に偽であると言います。何か案は?

答えて

1

Flaskは、メソッドパラメータをバインドして、ルートの一部である場合に引数をルーティングします。 documentationを参照してください。

試してみてください。

@app.route('/mypage/<int:success>', defaults={'success': 0}) 
def my_page(success): 
    ... 

これはあなたが望むものはおそらくない/mypage/1または/mypage/TrueのようなURLを構築するためにurl_forを引き起こします。

あなたは、クエリ文字列パラメータを使用したい場合は、手動でリクエストからそれを得る必要があります。

@app.route('/mypage/') 
def my_page(): 
    success = request.args.get('success', False) 
    ... 

url_for('my_page', success=True)今のようなものが生成されます/mypage/?success=True理由:まで不明である

可変引数ターゲットエンドポイントはクエリ引数として生成されたURLに追加されます。 (url_for docsから)

+0

私は "成功= request.args.get( '成功'、False)が" メソッドを使用し、それは魔法のように動作し、ありがとうございました。 –

関連する問題