【问题标题】:'password_reset_confirm' not found. 'password_reset_confirm' is not a valid view function or pattern name未找到“密码重置确认”。 'password_reset_confirm' 不是有效的视图函数或模式名称
【发布时间】:2019-03-17 20:36:04
【问题描述】:

我不断收到此错误:

NoReverseMatch 在 /accounts/password_reset/ 未找到“password_reset_confirm”的反向。 'password_reset_confirm' 不是有效的视图函数或模式名称

以下是我目前的代码:

from django.conf.urls import url
from . import views
from django.urls import include
from django.contrib.auth import views as auth_views


app_name = 'accounts'

urlpatterns = [
    url(r'^login/$', views.login_view, name='login_view'),
    url(r'^register_view/$', views.register_view, name='register_view'),
    url(r'^logout/$', views.logout_view, name="logout_view"),
    url(r'^profile_view/$', views.profile_view, name="profile_view"),
    url(r'password_change/$',auth_views.PasswordChangeView.as_view(template_name='password_change.html',success_url='/accounts/password_change_done')),
    url(r'password_change_done/',auth_views.PasswordChangeDoneView.as_view(template_name='password_change_done.html')),
    url(r'password_reset/$',auth_views.PasswordResetView.as_view(template_name='registration/password_reset_form.html',email_template_name='registration/password_reset_email.html',subject_template_name='registration/password_reset_email.txt',success_url='/accounts/password_reset_done/',from_email='mpho.maleka3@gmail.com')),
    url(r'password_reset_done/',auth_views.PasswordResetDoneView.as_view(template_name='registration/password_reset_done.html')),
    url(r'password_reset_confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',auth_views.PasswordResetConfirmView.as_view(template_name='registration/password_reset_confirm.html',success_url='/accounts/password_reset_confirm/'), name='password_reset_confirm'),
    url(r'password_reset_complete/',auth_views.PasswordResetCompleteView.as_view(template_name='registration/password_reset_complete.html')),
]

【问题讨论】:

  • 你能分享你的'registration/password_reset_form.html'文件吗?
  • Django 会告诉你在哪个模板和哪一行导致了错误。您需要做的就是将该行从{% url 'password_reset_confirm' %} 编辑为{% url 'accounts:password_reset_confirm' %}
  • {% extends 'shop/base.html' %} {% block content %}

    设置你的密码

    {% csrf_token %} {{ form.as_p }}
    {% endblock %}
  • password_change 等其他 url 效果好吗?
  • action=... 中似乎缺少某些内容。

标签: python django


【解决方案1】:

您需要知道 django 使用名称为 password_reset_confirm 的电子邮件主题的默认模板,即 (password_reset_email.html),但您使用的是命名空间 acocunts:password_reset_confirm,所有您需要的做的是

  1. 使用此属性覆盖模板路径email_template_name
auth_views.PasswordResetView.as_view(
  template_name ='accounts/registration/password_reset.html',
  email_template_name = 'accounts/registration/password_reset_email.html'),
  1. settings.py 中设置您的电子邮件配置以发送您的电子邮件,而不会收到错误 (Errno 111) 连接被拒绝

【讨论】:

    【解决方案2】:

    要让 Django 使用您应用的 registration/password_reset_form.html' 模板,您需要在您的 INSTALLED_APPS 设置中将该应用移到 上方 django.contrib.admin

    请注意,Django 无法轻松地将名称空间与密码重置视图一起使用。一旦你修复了这个NoReverseMatch,你可能会发现你必须修复类似的错误。将您的密码重置 URL 模式移动到没有命名空间的 urls.py 中可能会更容易。

    【讨论】:

    • 这是最好的解决方案。所以例如将其移至您项目的 urls.py,您通常只需在其中引用您的应用程序的 urls.py
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2019-04-04
    • 2018-11-19
    • 2019-04-06
    • 2019-08-13
    • 2019-11-04
    • 2021-04-21
    相关资源
    最近更新 更多