首页 > 解决方案 > Django 2.1.3 重置密码链接不显示

问题描述

升级到 Django 2.1.3 后,我注意到“忘记了您的密码或用户名?” 管理员登录页面中缺少链接。经过一番调查,我发现django.contrib.auth.urls.py模块使用password_reset了重置 url 的名称,而在django/contrib/admin/templates/admin/login.html模板中,url 被命名为admin_password_reset

django.contrib.auth.urls.py(第 16 行)

path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'),

django/contrib/admin/templates/admin/login.html(从第 54 行开始)

{% url 'admin_password_reset' as password_reset_url %}
{% if password_reset_url %}
<div class="password-reset-link">
<a href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a>
</div>
{% endif %}

当我更改admin_password_resetpassword_resetin Django'slogin.html时,链接显示在登录页面上并按预期工作。

在我的urls.py我有:

path('lodging/', include('django.contrib.auth.urls')),

我的项目对身份验证系统没有其他修改。这是一个错误还是我错过了什么?

更新

我检查了我的一个较旧的 Django 项目(v1.11)并且存在相同的东西:login.html显示admin_password_resetauth.urls显示password_reset。此外,“忘记密码”链接不会显示在登录页面上。admin_password_reset此外,所有 Django 源代码中的“grepping”只返回login.html文件。

所以我肯定做错了什么。

标签: djangodjango-admindjango-authentication

解决方案


我在 django 3 上遇到了同样的问题。不同版本的 django 需要不同的代码,但基本上它们都只需要你指定 admin_password_reset 的 url

这是对我有用的 django 3:

from django.contrib.auth.views import PasswordResetView


urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'admin_password_reset/', PasswordResetView.as_view(), name='admin_password_reset')
]

推荐阅读