NoReverseMatch при входе в систему с помощью сброса пароля Django
У меня есть небольшое приложение Django. Я настраиваю аутентификацию и только что закончил функциональность забытого/сброшенного пароля. Однако, когда пароль сброшен, он не перенаправляет на страницу успеха. Я просмотрел весь свой код и не могу найти никаких ссылок на 'login', которые были бы неправильно закодированы. Ошибка, которая появляется, выглядит следующим образом: 'Reverse for 'login' not found. 'login' не является допустимой функцией представления или именем шаблона'
Вот соответствующие файлы из моего проекта:
account urls.py
from django.urls import path, include, reverse_lazy
from django.contrib.auth import views as auth_views
from . import views
app_name = 'account'
urlpatterns = [
#Login URLs
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
#User Pages URLs
path('dashboard/', views.dashboard, name='dashboard'),
path('nodes/', include('nodes.urls')),
#Password Changes URLs
path('password_change/', auth_views.PasswordChangeView.as_view(success_url=reverse_lazy('account:password_change_done')), name='password_change'),
path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
#Password Reset URLs
path('password_reset/',
auth_views.PasswordResetView.as_view(success_url=reverse_lazy('account:password_reset_done')),
name='password_reset'),
path('password_reset/done/',
auth_views.PasswordResetDoneView.as_view(),
name='password_reset_done'),
path('reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(success_url=reverse_lazy('account:password_reset_complete')),
name='password_reset_confirm'),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
password_reset_confirm.html:
{% block content %}
<div class="page-title">
<h1>Reset Password</h1>
</div>
<br>
<div class="login-container">
<div class="login-box">
<br>
<h3 style="text-align: center;">Reset your password</h3>
<div class="login-form" style="text-align: center; ">
{% if validlink %}
<p>Please enter your new password twice:</p>
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Change my password"/></p>
</form>
{% else %}
<p>The password reset link was invalid, possibly because it has
already been used. Please request a new password reset link</p>
{% endif %}
</form>
</div>
</div>
</div>
{% endblock %}
password_reset_done.html
{% block content %}
<div class="page-title">
<h1>Password Reset Confirmation</h1>
</div>
<br>
<div class="login-container">
<div class="login-box">
<br>
<h4 style="text-align: center;">An email has been sent to the email associated with your account, follow the link
in the email to reset your password.</h4>
<h4>If you do not receive an email, please try again and make sure you have entered the correct email</h4>
</div>
</div>
</div>
{% endblock %}
В прошлом у меня были ошибки NoReverseMatch, и мне удавалось их исправить, но с этой я немного запутался
Любая помощь была бы замечательной!
Ваша текущая функциональность сброса пароля ожидает url с именем login
. Вы определили представление входа в приложение, которое имеет имя app_name "account". Это создает пространство имен для всех урлов в этом модуле. Таким образом, ваше представление входа в систему имеет имя account:login
.
Случайно ли у вас settings.LOGIN_URL
установлено значение "login"? Скорее всего, что-то вызывает reverse("login")
или {% url "login" %}
. Изменение этого значения на "account:login"
исправит ситуацию или перемещение представления входа в корень из пространства имен учетной записи будет работать.