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.
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.
from django.shortcuts import redirect
def optout(request):
return redirect("http://stackoverflow.com/")
Your conditional statements must not be catching.
using class HttpResponseRedirect
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.