Fabrice Jaouën
Fabrice Jaouën

Reputation: 199

NoReverseMatch in Django Password Reset

I'm using Django 3.1 and I'm trying to reset the password. Every step goes fine but one: After the password reset using PasswordResetConfirmView, I use success_url to reach the PasswordCompleteView, but a NoReverseMatch Error is raised: http://127.0.0.1:8000/customer/reset/Mjg/set-password/reset/done/ : Mjg/set-password/ always stay in the middle. How can I remove this ?

The template is the following one:

{% extends "./base.html" %}  
{% block title %}Confirmation du Mot de Passe{% endblock %}  
{% block content %} 
<h1>Réinitialisez votre mot de passe</h1>  
{% if validlink %} 
<p> Saisissez votre mot de passe, puis confirmez-le :</p> 
<form method="post">     
{{ form.as_p }}     
{% csrf_token %}     
<p><input type='submit' value='Changer'></p> 
</form> 
{% else %} 
<p>Le lien n'est pas valide. Veuillez renouveler votre demande</p> 
{% endif %}  
{% endblock %}

The url path is the following one:

path('reset/<uidb64>/<token>/', 
    auth_views.PasswordResetConfirmView.as_view(
    template_name="customer/password_reset_confirm.html",
    success_url="reset/done/",
    post_reset_login=True
    ),
    name='password_reset_confirm')

and the outcome is: 'http://127.0.0.1:8000/customer/reset/Mjg/set-password/reset/done/` Thank so much for your help

Upvotes: 2

Views: 178

Answers (2)

Fabrice Jaou&#235;n
Fabrice Jaou&#235;n

Reputation: 199

Here is the detailed code to solve this small issue:

path('reset/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(
             template_name="customer/password_reset_confirm.html",
             success_url="/customer/reset/done/",
             post_reset_login=True),
         name='password_reset_confirm'),

It was solved by detailing the success_url.

Upvotes: 0

NKSM
NKSM

Reputation: 5884

Your success_url must be start with the forward slash success_url="/reset/done/".

But I would use better reverse_lazy - Django-Docs:

from django.urls import reverse_lazy

path('reset/<uidb64>/<token>/', 
    auth_views.PasswordResetConfirmView.as_view(
    template_name="customer/password_reset_confirm.html",
    success_url=reverse_lazy("password_reset_done"),
    post_reset_login=True
    ),
    name='password_reset_confirm')

Upvotes: 1

Related Questions