2017-05-17 35 views
1

我使用默认的django身份验证系统,很少进行自定义。登录和注销的核心功能按预期工作。问题是,在我的登录表单模板下面的代码片段:Django默认登录视图总是填充下一个字段

{% if next %} 
    <p>Please login to see this page.</p> 
{% endif %} 

这是从官方文档中提供的示例登录视图调整。这个想法是,如果用户在未登录的情况下尝试访问受保护页面,他/她将被重定向到登录页面,并且next参数被设置为受保护页面的URL。这工作正常。

但是,当用户单击登录url并直接导航到登录url时,不应显示上述错误消息。但在这种情况下,next参数将从settings.py设置为LOGIN_REDIRECT_URL,并且我们看到此错误消息。

我试图调试以找到问题所在,并在django.contrib.auth.views.LoginView类中找到它。本课程有一个方法get_success_url,该方法从next参数或LOGIN_REDIRECT_URL获取重定向url。此方法正被用于在方法get_context_data中填充登录表单的上下文,在我看来这是不正确的。 dispatch方法也使用get_success_url来获取重定向url,这是正确的,因为目的是实际重定向。

我不确定我的解释是否清楚,如果不是,请告诉我。有没有解决方法?我应该为此提交一个错误报告吗?

使用:

  • 的Python:3.6(Anaconda3,64位)
  • Django的:1.11.1
  • django的登记:2.2

募集Django的错误https://code.djangoproject.com/ticket/28229

+0

您可以发布错误或堆栈跟踪以及设置和查看文件的代码 – Exprator

+0

没有错误堆栈跟踪。请阅读问题文字。登录视图在不应该的时候设置“next”属性。那就是问题所在。也没有任何观点,我使用django的默认授权系统的意见。除了'startproject'生成的内容之外,我还没有在settings文件中定制任何东西。 –

+0

你说你看到错误信息?那是什么? – Exprator

回答

1

这不是一个解决方案,但更像是一个解决办法:

假设你LOGIN_REDIRECT_URL设置为/,你可以写{% if next != "/" %}而不是{% if next %}