2016-04-07 8 views
0

を私はいくつかの条件にユーザーをリダイレクトしていない場合は通常の流れを継続する必要があるコードの部分がありますジャンゴリダイレクトとブレーク電流の流れ

# entry point of the request 
def MyView(request): 
    object = MyAuth(request) 
    # do stuff with object 

    return render('some_template.html') 


def MyAuth(request): 
    if some_condition is True: 
     return redirect('url') 

    return object 

をしかし、リダイレクトが発生していないようだ、など私は毎回テンプレートをレンダリングしています。

なぜリダイレクトは現在のフローを中断しませんか?

いくつかのテストを追加してメソッドのフローを変更しようとしましたが、リダイレクトが現在の要求を停止しない理由はまだ分かりません。

+1

「MyAuth(request)」から返されたものは、「オブジェクト」に格納されていますが、これはまったく返されません。 – AKS

+0

リダイレクトステートメントを返さないと、代わりに実行されますか? – nobe4

+0

'MyAuth'からの応答を返すのではなく、例外をスローして' MyView'でキャッチしてURLにリダイレクトすることができます。あなたが 'MyAuth'を再利用する必要がないならば、私は' MyView'ですべてを書くことを提案します。 – AKS

答えて

0

objectのタイプを確認して、それに応じて返信することができます()。この回答の後に、上記のコメントの説明があります。)。

def MyView(request): 
    object = MyAuth(request) 

    # if it is a redirect then return it. 
    if isinstance(object, HttpResponseRedirect): 
     return object 

    # do stuff with object 

    return render('some_template.html') 
+0

回答をdownvoteするときに関連するコメントを追加してください。 – AKS

+0

イベントが動作している場合、MyAuthはさまざまなタイプのオブジェクトを返すので、混乱することがあります。条件が一致したときにMyAuthが常に同じURLにリダイレクトする場合は、MyAuthでNoneを返し、MyViewで返されたオブジェクトの値をチェックし、Noneの場合はURLにリダイレクトします。 – Marc

+0

それは良い点です。しかし、私はこの回答を追加しました。なぜなら、あなたは 'MyAuth'の実装を変更することにかなり頑張っていたからです。私の昨日のコメントを見れば、あなたの条件が満たされない場合、例外をスローして' MyView' 。私が言っていることは、あなたがこれをやり遂げることができる複数の方法があるということです。ここでの答えは、最小の変更を可能にして、現在の実装だけを考慮したものです。以前に示唆したように、条件を確認する必要がある場合は、 'MyView'でのみすべてを行うことができます。 – AKS