我有一个Django应用,其中包含来自homepage
的链接,该链接链接到View1
,该链接重定向到View2
,并且应该重定向回到{{1 }}。但是,View1
中的HTTP_REFERER
标头将View2
视为引用者,而不是 homepage
。
首页模板
View1
登录视图
...
<!-- This links to the LoginView -->
<a href="{% url 'login' %}">Login</a>
...
create_captcha视图
class LoginView(views.View):
def dispatch(self, request, *args, **kwargs):
if not request.session.test_cookie_worked():
request.session.set_test_cookie()
# This redirects to the create_captcha view
return redirect(reverse('create_captcha'))
return super().dispatch(request, *args, **kwargs)
预期的行为:def create_captcha(request):
if not request.session.test_cookie_worked():
return render("Please enable cookies and try again.")
# This SHOULD redirect to LoginView but instead redirects to the homepage.
return redirect(to=request.META.get('HTTP_REFERER'))
-> homepage link
-> LoginView
-> create_captcha
实际行为:LoginView
-> homepage link
-> LoginView
-> create_captcha
问题:如何使homepage
指向HTTP_REFERER
而不是首页?
答案 0 :(得分:0)
HTTP标准中没有任何内容说明重定向后HTTP_REFERER
应该发生什么,因此您的代码将依赖于浏览器。另外,HTTP_REFERER
并不总是受到尊重/启用。
从您的代码中,您似乎可以直接直接重定向到URL:
return redirect('login')
但我认为您想处理其他一些情况。
最好在网址上添加查询字符串,例如:
return redirect(reverse('create_captcha') + '?next=' + reverse('login')
或者在现代Python上更好一点:
return redirect(f"{reverse('create_captcha')}?next={reverse('login')}")
在验证码视图中:
return redirect(request.GET['next'])