我试图建立一个简单的网站,登录功能非常类似于这里的 SO。 用户应该能够以匿名用户的身份浏览站点,并且在每个页面上都有一个登录链接。当单击登录链接时,用户将被带到登录表单。在成功登录之后,用户应该被带回到页面,在那里他首先单击了登录链接。 我猜想我必须以某种方式将当前页面的 URL 传递给处理登录表单的视图,但我实际上无法让它工作。
编辑: 我想通了。我将当前页面作为 GET 参数传递,然后使用‘ next’重定向到该页面,从而链接到登录表单。谢谢!
编辑2: 我的解释似乎不够清楚,因此按照要求这里是我的代码: 假设我们在一个页面 foo.html 上,并且没有登录。现在我们希望在 foo.html 上有一个链接,它链接到 login.html。在那里我们可以登录,然后被重定向回 foo.html。 Foo.html 上的链接如下所示:
<a href='/login/?next={{ request.path }}'>Login</a>
现在我编写了一个自定义登录视图,看起来有点像这样:
def login_view(request):
redirect_to = request.REQUEST.get('next', '')
if request.method=='POST':
#create login form...
if valid login credentials have been entered:
return HttpResponseRedirect(redirect_to)
#...
return render_to_response('login.html', locals())
以及 login.html 中的重要一行:
<form method="post" action="./?next={{ redirect_to }}">
所以,是的,差不多就是这样,希望这能说清楚。