找不到 'password_reset_complete' 的反转

Reverse for 'password_reset_complete' not found

我正在使用 PasswordResetView 重设密码,但是当我输入新密码并提交按钮时。 Django 重定向到这个

ulrs.py

from django.urls import path
from Authentication import views
from django.contrib.auth import views as auth_view
from .forms import *

app_name = 'Authentication'

urlpatterns = [
    path('', views.loginpage, name='loginpage'),
    path('login', views.handlelogin, name='login'),
    path('logout', views.handlelogout, name='logout'),
    path('password_reset', views.password_reset, name='password_reset'),

    path('password_reset/done/',
         auth_view.PasswordResetDoneView.as_view(template_name='Authentication_template/password_reset_done.html'),
         name='password_reset_done'),

    path('reset/<uidb64>/<token>/',
         auth_view.PasswordResetConfirmView.as_view(template_name='Authentication_template/password_reset.html',
                                                    form_class=SetPasswordForm), name='password_reset_confirm'),

    path('password_reset_complete/', auth_view.PasswordResetCompleteView.as_view(
        template_name='Authentication_template/password_reset_complete.html'),
         name='password_reset_complete')
]

这里我使用自定义视图向用户发送电子邮件。

您已设置 app_name = 'Authentication',这意味着您具有 namespaced 这些 url。所以你现在需要将它们称为 Authentication:password_reset_complete 而不是 password_reset_complete,等等。参见 URL namespaces (Django docs)

一个解决方案是删除行 app_name = 'Authentication',如果您希望保留这些行,您需要自己为视图设置 success_url,您可以将其作为 kwarg 传递给as_view:

from django.urls import reverse_lazy


path('reset/<uidb64>/<token>/',
    auth_view.PasswordResetConfirmView.as_view(
        template_name='Authentication_template/password_reset.html',
        form_class=SetPasswordForm,
        <b>success_url = reverse_lazy('Authentication:password_reset_complete')</b>
    ), name='password_reset_confirm'
)

看来您为 password_reset_complete 使用了错误的路径名。

而不是路径('password_reset_complete/'...

试试:

path('reset/done/', auth_view.PasswordResetCompleteView.as_view(
    template_name='Authentication_template/password_reset_complete.html'),
     name='password_reset_complete')