首页 > 解决方案 > Django 密码重置中的 NoReverseMatch

问题描述

我正在使用 Django 3.1,并且正在尝试重置密码。每一步都很好,但有一个:使用 重置密码后 PasswordResetConfirmView,我使用 success_url 到达PasswordCompleteView,但引发 NoReverseMatch 错误 http://127.0.0.1:8000/customer/reset/Mjg/set-password/reset/done/::Mjg/set-password/ 始终停留在中间。我怎样才能删除这个?

模板如下:

{% 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 %}

url 路径如下:

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')

结果是:'http://127.0.0.1:8000/customer/reset/Mjg/set-password/reset/done/` 非常感谢您的帮助

标签: djangodjango-views

解决方案


success_url必须以正斜杠开头success_url="/reset/done/"

但我会使用更好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')

推荐阅读