2017-10-05 15 views
0

次のリダイレクトを使用して、変数suを別のルートに渡そうとしています。ルートは、私はsuNoneになりたいsuパラメータなしで呼び出された場合他のルートにパラメータを渡すことができません。

@app.route('/space/<spacename>', methods=['GET', 'POST']) 
@login_required 
def showspace(spacename, su = None): 
    if su != None: 
     print(su) 

return redirect(url_for('showspace', spacename=user.username, su='Welcome back')) 

ルートは次のようになります。しかしsushowspacesに渡された場合は、suの内容を印刷します。このようにすると、次のエラーがスローされます。

TypeError: showspace() missing 1 required positional argument: 'su' 

ありがとうございました。

+0

私はhttp://xahlee.info/python/function_def.htmlそれは、Python 2であるが、私は、私はそれを適切に適応していると思ったこれを見つけました。たとえ私がsu = Noneを使わなくてもsuだけするとうまくいかない。 – user3080315

+0

申し訳ありませんが、間違っています。 – hop

答えて

0

ビュー関数の各引数についても、url変数を作成します。

ので、あなたは、次のURLを変更する必要があります。

@app.route('/space/<spacename>/<su>', methods=['GET', 'POST']) 

、その後、あなたはこれを行うことができ、デフォルト値はNULLにすることを必要があります。

def showspace(spacename, su = None) 

と、この第二部あなたは自分で考え出しました。 URLデコレータを調整するだけで問題は解決されます。

url(GET)の値は、ユーザーが実際に簡単に変更できるので、url_forの機能から送信された値である必要はありません。

このメソッドのユーザーであれば、次のようなビューを呼び出す必要があります:

<domain>/space/<spacename>/ 

最後のスラッシュに注意してください。

  1. 新しいを追加するために新しいURLルール

を追加するPOST

  • を使用してsuを送信するために:あなたは最後のスラッシュなしでそれを呼び出すことができるようにしたいのであれば、2つのオプションがありますあなたはこのようにそれらを定義することができ、URLのルール:

    @app.route('/space/<spacename>/<su>/', methods=['GET', 'POST']  
    @app.route('/space/<spacename>/', methods=['GET', 'POST']) 
    def showspace(spacename, su = None): 
        pass 
    
  • +0

    ありがとうございました。コードを使用するときにsuパラメータを指定しないでexample.com/space/testを呼び出すことはできますか? – user3080315

    +0

    これについて私の答えを更新します。 – senaps

    関連する問題