Django自定义密码重置URL提交后未加载自定义模板,跳转默认模板
Django密码重置跳转默认模板问题排查方案
- 检查路由匹配顺序
如果你在urls.py中引入了include('django.contrib.auth.urls'),必须将你自定义的4条密码重置相关路由放在该include语句的上方。Django路由从上到下匹配,若官方auth路由在前,会优先匹配官方路由的逻辑,调用默认模板。 - 修正
password_reset_done路由的末尾斜杠
你当前配置的路径是'password_reset/done',缺少末尾的/。Django默认开启APPEND_SLASH配置,提交密码重置请求后默认跳转的地址为/password_reset/done/,和你配置的路径不匹配,就会触发官方默认路由。将对应路径修改为'password_reset/done/'即可:path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(template_name="authsystem/password_reset_sent.html"), name='password_reset_done'), - 校验模板加载优先级
打开settings.py检查两个配置项:- INSTALLED_APPS中,你存放模板的自定义应用(如authsystem)要排在
django.contrib.auth的前面。Django按INSTALLED_APPS的顺序查找模板,优先级高的应用模板会被优先加载。 - TEMPLATES配置中
APP_DIRS要设置为True,确保Django会读取各应用下templates目录的模板文件。
- INSTALLED_APPS中,你存放模板的自定义应用(如authsystem)要排在
- 验证模板路径拼写正确性
确认你的目录结构为<你的应用名>/templates/authsystem/password_reset_sent.html,注意文件名、目录名的大小写是否和配置的template_name完全一致,Linux环境下大小写敏感,拼写不一致会无法识别自定义模板。 - 强制指定跳转路由
可以给PasswordResetView手动指定success_url,避免跳转逻辑异常:from django.urls import reverse_lazy path('password_reset/', auth_views.PasswordResetView.as_view( template_name="authsystem/password_reset.html", success_url=reverse_lazy('password_reset_done') ), name='password_reset'),
内容的提问来源于stack exchange,提问作者Saud Zubedi
相关产品推荐
相关产品推荐

