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

问题:

我正在尝试建立一个简单的网站,其登录功能非常类似于这里的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 }}">

所以,这几乎是这样,希望清楚。

回答:

您不需要为此添加额外的视图,功能已经内置。
首先,每个带有登录链接的页面都需要知道当前路径,最简单的方法是将请求上下文预处理程序添加到settings.py(第一个是默认值),然后每个请求中都可以使用该请求对象。
 settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    "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="{% url django.contrib.auth.views.login %}?next={{request.path}}">Login</a>

这将向登录页面添加一个GET参数,指向当前页面。
登录模板可以这样简单:
 登记/ login.html的:

{% block content %}
<form method="post" action="">
  {{form.as_p}}
<input type="submit" value="Login">
</form>
{% endblock %}

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Django: Redirect to previous page after login

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

46 − = 38