django-user-accounts登录成功后不重定向问题求助
解决django-user-accounts登录后不重定向的问题
我之前也踩过django-user-accounts这个重定向的坑,结合你的配置和日志信息,给你梳理几个可能的原因和解决办法:
1. 先确认ACCOUNT_LOGIN_REDIRECT_URL的配置正确性
django-user-accounts确实是用ACCOUNT_LOGIN_REDIRECT_URL来控制登录成功后的重定向(而非Django原生的LOGIN_REDIRECT_URL),你一开始的配置方向是对的,但要检查两个关键点:
- 确保你已在settings.py顶部正确导入
reverse_lazy:
如果没导入,# Django 2.0+版本 from django.urls import reverse_lazy # 旧版Django请用这个 # from django.core.urlresolvers import reverse_lazyreverse_lazy('dashboard')会直接抛出异常,导致整个配置失效。 - 验证
dashboard这个URL名称确实存在于项目的urls中,你可以先改成硬编码路径测试:
如果这样能生效,说明是ACCOUNT_LOGIN_REDIRECT_URL = '/dashboard/'reverse_lazy解析URL名称时出了问题。
2. 检查模板中next隐藏域的干扰
你的登录模板里加了<input type="hidden" name="next" value="{{ next }}"/>,但如果{{ next }}变量是空值,django-user-accounts的登录视图会优先使用这个空的next参数,直接忽略ACCOUNT_LOGIN_REDIRECT_URL的配置。
解决办法:
- 先在模板里临时添加
{{ next }}查看变量是否有值,如果是空的,要么直接删掉这个隐藏域(让视图自动使用配置的重定向地址),要么手动指定重定向路径:<input type="hidden" name="next" value="{% url 'dashboard' %}"/> - 也可以尝试通过GET参数传递
next测试:访问/account/login/?next=/dashboard/,看登录后是否能正常跳转。
3. 确认登录是否真的成功了
你的控制台日志只有GET请求的200状态码,没有POST请求记录,这说明可能表单提交有问题,或者登录验证失败了:
- 检查表单提交的正确性:确保表单
method="post",且{% csrf_token %}正常渲染,你可以用浏览器开发者工具查看提交请求是否为POST方法,是否携带了csrf token。 - 在模板里添加错误提示,排查是否是用户名密码验证失败:
如果是验证失败,登录自然不会触发重定向,你可能误以为是重定向配置的问题。{% if form.errors %} <div class="alert alert-danger"> {% for field in form %} {% for error in field.errors %} <p>{{ error }}</p> {% endfor %} {% endfor %} {% for error in form.non_field_errors %} <p>{{ error }}</p> {% endfor %} </div> {% endif %}
4. 排查版本或配置冲突
有些旧版本的django-user-accounts可能存在配置优先级的bug,你可以尝试更新到最新稳定版,或者核对官方文档确认当前版本的重定向配置项是否有变化。
内容的提问来源于stack exchange,提问作者Nurzhan Nogerbek
相关产品推荐
相关产品推荐

