首页 > 解决方案 > 错误'找不到'password_reset_confirm'的反向。' 在 Django

问题描述

所以,我试图建立一个博客网站,用户可以通过向他的电子邮件地址发送电子邮件来重置他的密码,我主要使用 Django Build In 功能。我试图创建用户可以在其中重置密码的确认 URL 路径,但即使我包含密码重置确认的路径,也会出现错误。

错误:未找到“password_reset_confirm”的反向。'password_reset_confirm' 不是有效的视图函数或模式名称。

我的 urls.py 用于密码重置

from django.conf.urls import url
from django.contrib.auth import views as auth_view
from django.urls import path

app_name = "blog"

urlpatterns = [
    # for /blog/password-reset/
    path('password-reset/', auth_view.PasswordResetView.as_view(template_name='blog/password_reset.html'), name="password_reset"),
    # for /blog/password-reset/done/
    path('password-reset/done/', auth_view.PasswordResetDoneView.as_view(template_name='blog/password_reset_done.html'), name="password_reset_done"),
    # for /blog/password-reset/confirm/<uidb64>/token>
    path('password-reset-confirm/<uidb64>/<token>', auth_view.PasswordResetConfirmView.as_view(template_name='blog/password_reset_confirm.html'), name="password_reset_confirm"),
] 

注意:我没有包括所有的网址,因为它有点大

我的密码-reset.html

{% extends 'blog/base_for_log.html' %}
{% load  crispy_forms_tags %}
{% block title %}Blog{% endblock %}
    {% block body %}
    <div class = "container">
        <div class="content-section py-5">
            <form method="POST">
                {% csrf_token %}
                <fieldset class="form-group">
                    <legend class="border-bottom mb-4">
                        Password Reset
                    </legend>
                    {{ form|crispy }}
                </fieldset>
                <div class="form-group">
                    <button class="btn btn-outline-info" type = "submit">Request Reset Password</button>
            </div>
                </div>
            </form>
        </div>   
    </div>

{% endblock %}

我的博客/password_reset_confirm.html

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block body %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Reset Password</button>
            </div>
        </form>
    </div>
{% endblock body %}

我希望输出是 ConnectionResufedError,但我得到了 NoReverseMatch 错误。

提前致谢。

标签: pythondjango

解决方案


问题是您path('password-reset-confirm/<uidb64>/<token>', ...)需要两个 url 路径参数(uidb64 和 token)。

在您的模板中,您只 href="{% url 'blog:password_reset_confirm' %}"没有提供任何参数,因此函数无法解析为有效的 url。您需要提供如下值:

href="{% url 'blog:password_reset_confirm' uidb64='uidb64' token='token' %}"

推荐阅读