web-dev-qa-db-ja.com

Djangoで外部URLにリダイレクトする方法

これは簡単だと思いますが、わかりません。オプトアウトビューを作成しようとしています。取得リクエストを受け取っています。 urls.pyを使用して、オプトアウトビューをレンダリングします。このビューでは、ユーザーの一部のパラメーターをデータベースに保存してから、ユーザーを外部URLにリダイレクトします。私は試した:

return redirect('http://stackoverflow.com/')

Djangoドキュメント から。ただし、オプトアウトビューでは、リダイレクトが返される代わりにトレーニングテンプレートがレンダリングされますが、パラメーターは期待どおりにデータベースに保存されます。私のコードは次のとおりです:

def optout(request):
    if (('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != "") or 
        (request.session.get('userid', False) and request.session['userid'] != "")):
        if ('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != ""):
            userid = request.META['REMOTE_USER']
        if (request.session.get('userid', False) and request.session['userid'] != ""):
            userid = request.session['userid']
        user = User.objects.get(username=userid)
        user.optout = True
        user.postpone = False
        user.save()
        return redirect('http://stackoverflow.com/')
    context = { 'userid': "" }
    return render(request, 'games/Training.html', context)

どんな助けでも大歓迎です。

15
1man

ええ、return redirect('http://stackoverflow.com/')は正しい方法です。

以下を実行すると、それがリダイレクトの有効な方法であることを確認できます。

def optout(request):
    return redirect("http://stackoverflow.com/")

あなたの条件文はキャッチであってはなりません。

10
sytech

クラスの使用HttpResponseRedirect

from Django.http import HttpResponseRedirect

def out(request):
    return HttpResponseRedirect("http://google.com")

または:

クラスの使用HttpResponse

from Django.http import HttpResponse

def out(request):
    response = HttpResponse("", status=302)
    response['Location'] = "http://google.com"
    return response

注:

最後の1つは、Webサイトからモバイル(Android/Iphone)アプリにリダイレクトするのに便利です。場所はscheme://Host

6
sandes