Django:登录后重定向到上一页

我正在尝试建立一个简单的网站,它的登录功能与上面的非常相似。
用户应该能够以匿名用户的身份浏览该网站,并且每个页面上都会有一个登录链接。单击登录链接时,用户将进入登录表单。成功登录后,应将用户带回他首先单击登录链接的页面。
我猜我必须以某种方式将当前页面的url传递给处理登录表单的视图,但我无法真正让它工作

编辑:
我想出来了。我通过将当前页面作为GET参数传递来链接到登录表单,然后使用“next”重定向到该页面。谢谢

编辑2:
我的解释似乎不清楚,因此根据要求,以下是我的代码:
假设我们在一个foo.html页面上,并且没有登录。现在我们想在foo.html上有一个链接,链接到login.html。在那里我们可以登录,然后重定向回foo.html。
foo.html上的链接如下所示:

<a href='https://stackoverflow.com/questions/806835/10〕https://stackoverflow.com/login/?next={{request.path}}}'>登录&lt/a>

现在,我编写了一个自定义登录视图,看起来有点像这样:

def登录视图(请求):
重定向到=request.request.get('next','')
if request.method==“POST”:
#创建登录表单。。。
如果输入了有效的登录凭据:
返回HttpResponseRedirect(重定向到)
#...
返回render\u to\u响应('login.html',locals())

以及login.html中的重要一行:

<form method=“post”action=“../?next={{redirect_to}}}”>

是的,差不多就是这样,希望这能说明问题

您不需要为此创建额外的视图,该功能已经内置

首先,每个带有登录链接的页面都需要知道当前路径,最简单的方法是将请求上下文预处理程序添加到settings.py(第一个4个是默认值),然后请求对象将在每个请求中可用:

设置。py:

模板\u上下文\u处理器=(
“django.core.context_processors.auth”,
“django.core.context_processors.debug”,
“django.core.context_processors.i18n”,
“django.core.context_processors.media”,
“django.core.context_processors.request”,
)

然后添加您想要的登录链接模板:

base.html:

<a href=”https://stackoverflow.com/questions/806835/{%url django.contrib.auth.views.login%}?下一步={{request.path}}};登录&lt/a>

这将向登录页面添加一个GET参数,该参数指向当前页面

登录模板可以如此简单:

注册/login.html:

{%block content%}
<form method=“post”action=”“>
{{form.as_p}}
<输入type=“submit”value=“Login”>
&lt/表格>
{%endblock%}

发表评论