我认为这应该很容易,但我无法弄清楚。我正在尝试编写一个退出视图。我收到了一个请求。通过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)
非常感谢任何帮助。
答案 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