How to redirect to external URL in Django?

徘徊边缘 提交于 2020-01-23 04:45:11

问题


I think this should be easy, but I cannot figure it out. I am trying to write an opt-out view. I am receiving a get request. Through urls.py, I render my opt-out view. In this view, I save some parameters for the user in the database and then I want to redirect the user to an external URL. I tried:

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

from Django documentation. However, the optout view renders the training template instead of returning the redirect, though the parameters are saved in the database as expected. My code is as follows:

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)

Any help is highly appreciated.


回答1:


Yeah, return redirect('http://stackoverflow.com/') is the correct method.

If you do the following, you can confirm that is a working method to redirect.

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

Your conditional statements must not be catching.




回答2:


using class HttpResponseRedirect

The path to redirect can be a fully qualified URL (e.g. 'https://google.com/search/'), an absolute path with no domain (e.g. '/search/'), or even a relative path (e.g. 'search/'). In that last case, the client browser will reconstruct the full URL itself according to the current path.

from django.http import HttpResponseRedirect

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

Or:

using class HttpResponse

from django.http import HttpResponse

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

NOTE:

The last one is useful to redirect from a website to a mobile (Android/Iphone) app. Where location is scheme://host



来源:https://stackoverflow.com/questions/35903832/how-to-redirect-to-external-url-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!