如何在 Django 中重定向到外部 URL?
Posted
技术标签:
【中文标题】如何在 Django 中重定向到外部 URL?【英文标题】:How to redirect to external URL in Django? 【发布时间】:2016-06-24 13:12:31 【问题描述】:我认为这应该很容易,但我无法弄清楚。我正在尝试编写一个退出视图。我收到一个获取请求。通过 urls.py,我呈现了我的退出视图。在这个视图中,我将用户的一些参数保存在数据库中,然后我想将用户重定向到外部 URL。我试过了:
return redirect('http://***.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://***.com/')
context = 'userid': ""
return render(request, 'games/Training.html', context)
非常感谢任何帮助。
【问题讨论】:
你说的不起作用是什么意思? optout 视图呈现的是 Training 模板而不是返回重定向? @JohnGordon,是的。你说得对。尽管参数按预期保存在数据库中,但 optout 视图会呈现训练模板而不是返回重定向。 类似问题已回答here 如果它正在渲染训练模板,那么很可能您的顶部if
语句评估为 false(因此永远不会调用重定向)。数据库保存必须在其他地方进行。尝试放入一些日志语句。
你导入重定向了吗?从 django.shortcuts 导入重定向
【参考方案1】:
是的,return redirect('http://***.com/')
是正确的方法。
如果您执行以下操作,您可以确认这是一种有效的重定向方法。
from django.shortcuts import redirect
def optout(request):
return redirect("http://***.com/")
你的条件语句不能被抓住。
【讨论】:
是的 Gator_Python。谢谢您的答复。我多次检查数据库,两个参数都保存正确。 那么,发生了什么而不是预期的重定向? optout 视图呈现训练模板而不是返回重定向,尽管参数按预期保存在数据库中。 不要检查您的数据库,而是尝试打印出您要检查的条件,看看它们是否符合您的预期。或者将条件更改为if True
只是为了证明 return redirect
部分有效。然后我们可以缩小我们的范围,找出为什么这些没有捕捉到,这就是我怀疑正在发生的事情。
有没有一种方法可以在新标签页上打开链接,就像我们在 HTML 中使用 _blank
一样?【参考方案2】:
使用类 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'] = "scheme://host"
return response
注意:
最后一个对于从网站重定向到移动设备很有用 (安卓/苹果手机)应用程序。位置在哪里
scheme://host
【讨论】:
以上是关于如何在 Django 中重定向到外部 URL?的主要内容,如果未能解决你的问题,请参考以下文章