如何让Django使用LoginRequiredMixin登录后重定向到原请求页面
问题解决说明
问题根因
- 自定义LoginView的
get_context_data方法调用父类时未传入**kwargs,导致模板上下文丢失next参数,表单提交时隐藏的next字段值为空,Django就会跳转默认的/accounts/profile地址 - LoginView的表单属性配置错误,Django内置LoginView识别的表单配置项是
authentication_form,你当前写的form = AuthenticationForm不生效,且直接将表单类传入上下文而非实例化后的表单对象,可能导致校验逻辑异常
修复代码
1. 修改LoginView代码
class LoginView(SearchMixin, auth_views.LoginView): template_name = 'VMwareInventory/Registration/login.html' # 改用LoginView识别的表单配置属性 authentication_form = AuthenticationForm def get_context_data(self, **kwargs): # 调用父类方法时传入**kwargs,保留next等默认上下文参数 context = super(LoginView, self).get_context_data(**kwargs) # 直接使用父类已经实例化好的表单对象,避免校验失效 context['login_form'] = context['form'] return context
2. 可选补充配置
如果需要设置无next参数时的默认跳转地址,在settings.py中添加如下配置即可:
LOGIN_REDIRECT_URL = '/'
上述配置的地址可根据你的实际首页地址修改。
内容的提问来源于stack exchange,提问作者Jimmy Fort
相关产品推荐
相关产品推荐

