使用Django LoginView登录时出现ImportError: 'd'非模块路径问题求助
Django LoginView 提交时出现"d doesn't look like a module path"错误的解决方案
问题描述
使用django.contrib.auth的LoginView搭建登录页面,点击登录提交按钮时触发ImportError,错误提示:
ImportError at /user/login
"d doesn't look like a module path"
登出视图可正常运行,仅登录提交环节出错。已在settings.py中配置:
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend' ) LOGIN_URL = 'user/login'
相关代码如下:
urls.py
from django.urls import path from . import views from django.contrib.auth import views as auth_views urlpatterns = [ path("register", views.register_request, name="register"), path("login", auth_views.LoginView.as_view(template_name="user/login.html"), name="login"), path("logout", auth_views.LogoutView.as_view(template_name="user/logout.html"), name="logout") ]
login.html
{% extends "base/base.html" %} {% load crispy_forms_filters %} {% load crispy_forms_tags %} {% block content %} <div class="content-section"> <form method="POST" > {% csrf_token %} <fieldset class="form-group"> <legend class="border-bottom mb-4">Log In</legend> {{ form|crispy }} </fieldset> <div class="form-group"> <button class="btn btn-outline-info" type="submit">Login</button> </div> </form> <div class="border-top pt-3"> <small class="text-muted"> Need An Account? <a class="ml-2" href="{% url 'register' %}">Sign Up Now</a> </small><br> <small class="text-muted"> <a href="/">Forgot password?</a> </small> </div> </div> {% endblock content %}
原因分析
错误核心在于settings.py中AUTHENTICATION_BACKENDS的配置错误:
- 你将其定义为元组,但最后一个元素末尾未添加逗号,Python会将这个结构解析为单个字符串而非元组。
- Django处理认证后端时会迭代该配置,遍历字符串的每个字符,第一个字符
'd'被误认为是认证后端的模块路径,从而抛出错误。
解决方案
1. 修复认证后端配置
在settings.py中,给AUTHENTICATION_BACKENDS的元组元素末尾添加逗号,确保Python将其识别为元组:
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', # 添加逗号 )
2. 优化LOGIN_URL配置(推荐)
LOGIN_URL建议使用命名URL格式,避免硬编码路径带来的维护问题:
LOGIN_URL = 'login' # 对应urls.py中name="login"的路径
3. 配置登录成功跳转路径(可选)
默认情况下,LoginView登录成功后会跳转到/accounts/profile/,若该路径未配置可自定义跳转目标:
在urls.py中修改LoginView配置:
# 直接指定路径 path("login", auth_views.LoginView.as_view( template_name="user/login.html", success_url="/" # 替换为你的首页或目标路径 ), name="login"), # 或使用命名URL(需提前导入reverse_lazy) from django.urls import reverse_lazy path("login", auth_views.LoginView.as_view( template_name="user/login.html", success_url=reverse_lazy("home") # 假设存在name="home"的路径 ), name="login"),
验证步骤
- 保存修改后的
settings.py和urls.py - 重启Django开发服务器
- 重新尝试登录,确认错误是否解决
内容的提问来源于stack exchange,提问作者Franciso Reyna
相关产品推荐
相关产品推荐

