You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Django-Jazzmin登录页面及密码重置功能

问题解决步骤
  • 调整路由匹配顺序
    Django路由按从上到下的优先级匹配,你当前把path('admin/', admin.site.urls)放在最开头,访问/admin下的登录页时会优先走Admin默认的登录逻辑,不会触发你自定义的登录路由。需要把所有自定义的认证相关路由移到admin路由的前面:
urlpatterns = [
    # 自定义认证路由放在最前面
    url(r'^.*password_reset/$', auth_views.PasswordResetView.as_view(subject_template_name='registration/html_password_reset_subject.txt',
    html_email_template_name='registration/html_password_reset_email.html'), name='password_reset'),
    url(r'^.*password_reset/done/$', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),    
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
    auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    url(r'^reset/done/$', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    url(r'^.*logout/$', logout,{'next_page': 'myapp:login'}),
    url(r'^.*accounts/login/$', LoginView.as_view(template_name='registration/login.html'), name='login'),
    url(r'^.*accounts/profile/', TemplateView.as_view(template_name='registration/profile.html'), name='profile'),
    url(r'^login/$', LoginView.as_view(template_name='registration/login.html'), name='login'),
    url(r'^logout/$', logout, name='logout'),
    # admin路由放最后
    path('admin/', admin.site.urls),
]
  • 调整INSTALLED_APPS优先级
    Django加载模板时会按照INSTALLED_APPS的注册顺序查找,你需要把自己的项目应用放在jazzmin和django.contrib.admin的前面,保证你的自定义模板优先级高于Jazzmin默认模板:
INSTALLED_APPS = [
    # 你的自定义应用放在最前
    'myapp',
    # 再放jazzmin
    'jazzmin',
    # 再放django默认admin
    'django.contrib.admin',
    # 其余应用...
]

同时确认settings.py中TEMPLATES配置里已经添加了项目根目录的templates路径:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'], # 确认这行存在
        'APP_DIRS': True,
        # 其余配置...
    },
]
  • 直接在Jazzmin配置中指定自定义登录模板
    可以通过settings.py中的JAZZMIN_SETTINGS配置项强制指定登录模板,优先级最高:
JAZZMIN_SETTINGS = {
    # 其余jazzmin配置...
    "login_template": "registration/login.html",
}
  • 清理重复路由配置
    你当前路由里重复定义了多个同名的login路由,模糊的正则^.*也可能导致匹配混乱,建议清理冗余配置,避免路由冲突。

内容的提问来源于stack exchange,提问作者user2641103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:54:04