1ma*_*man 14 python django url redirect external-url
我认为这应该很容易,但我无法弄清楚.我正在尝试编写一个退出视图.我收到了一个请求.通过urls.py,我渲染我的退出视图.在此视图中,我在数据库中为用户保存了一些参数,然后我想将用户重定向到外部URL.我试过了:
return redirect('http://stackoverflow.com/')
Run Code Online (Sandbox Code Playgroud)
来自Django文档.但是,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)
Run Code Online (Sandbox Code Playgroud)
任何帮助都非常感谢.
是的,return redirect('http://stackoverflow.com/')是正确的方法.
如果执行以下操作,则可以确认这是重定向的工作方法.
def optout(request):
return redirect("http://stackoverflow.com/")
Run Code Online (Sandbox Code Playgroud)
你的条件陈述一定不能捕捉.
使用类HttpResponseRedirect
重定向的路径可以是完全限定的URL(例如' https://google.com/search/ '),没有域的绝对路径(例如'/ search /')甚至是相对路径(例如'search /')。在最后一种情况下,客户端浏览器将根据当前路径重新构造完整的URL。
from django.http import HttpResponseRedirect
def out(request):
return HttpResponseRedirect("http://google.com")
Run Code Online (Sandbox Code Playgroud)
要么:
使用类HttpResponse
from django.http import HttpResponse
def out(request):
response = HttpResponse("", status=302)
response['Location'] = "http://google.com"
return response
Run Code Online (Sandbox Code Playgroud)
注意:
最后一个对从网站重定向到移动(Android / Iphone)应用很有用。位置在哪里
scheme://host