访问Django内置PasswordChangeView页面提示TemplateDoesNotExist错误如何解决
问题原因
- 权限校验触发默认登录跳转:Django内置的
PasswordChangeView默认要求用户处于登录状态,未登录时会自动重定向到框架默认的登录地址/accounts/login/,而你项目中自定义的登录路径是/login/,没有为/accounts/login/配置对应的视图与模板,因此触发模板不存在错误。 - 模板目录配置异常(登录后仍报错的排查方向):若你已登录仍出现模板错误,需检查
settings.py中TEMPLATES配置项的DIRS参数是否添加了项目根目录的templates路径,Django默认只会扫描各应用下的templates目录,不会主动读取项目根目录的templates文件夹。
解决步骤
- 配置自定义登录地址
在项目settings.py中添加如下配置,指定全局登录跳转路径为你自定义的登录路由:
LOGIN_URL = '/login/' # 也可以直接写路由名,更规范 # LOGIN_URL = 'login_view'
- 校验模板目录配置
确认settings.py中TEMPLATES配置的DIRS字段包含根目录templates路径,示例如下:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 确保这行存在 'APP_DIRS': True, # 其余配置保持原有即可 } ]
- 可选:自定义密码修改模板路径
如果你不想使用默认的registration/password_change_form.html路径,也可以在路由中直接指定模板:
path('accounts/password_change/', auth_views.PasswordChangeView.as_view(template_name='your_custom_path.html'), name='password_change'),
- 补充后续跳转配置(可选但建议)
密码修改成功后默认会跳转到password_change_done路由,建议补充对应配置避免404:
path('accounts/password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
内容的提问来源于stack exchange,提问作者nmnsharma007
相关产品推荐
相关产品推荐

