如何在Django中重定向到外部URL?

时间:2016-03-09 22:19:29

标签: python django url redirect external-url

我认为这应该很容易,但我无法弄清楚。我正在尝试编写一个退出视图。我收到了一个请求。通过urls.py,我渲染我的退出视图。在此视图中,我在数据库中为用户保存了一些参数,然后我想将用户重定向到外部URL。我试过了:

return redirect('http://stackoverflow.com/')
来自Django documentation

。但是,optout视图呈现训练模板而不是返回重定向,尽管参数按预期保存在数据库中。我的代码如下:

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)

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

是的,return redirect('http://stackoverflow.com/')是正确的方法。

如果您执行以下操作,则可以确认这是一种重定向的工作方法。

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

你的条件陈述一定不能捕捉。

答案 1 :(得分:4)

使用 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

注意:

  

最后一个可用于将网站重定向到手机   (Android / Iphone)应用。位置是scheme://host