问题
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