在渲染时捕获到NoReverseMatch错误:找不到带有参数“()”和关键字参数“{'uidb36': '111','token': '1111111111111'}”的'django.contrib.auth.views.password_reset_confirm'的反向匹配。
很可能是您的urls.py文件存在问题。您需要设置正确的模式来获取传递为URL参数的uidb36和token值。如果没有设置正确,它将会抛出类似上面看到的错误。
例如:
(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name' : 'registration/password_reset.html', 'post_reset_redirect': '/logout/' })
registration/password_reset.html - 是我的自定义模板。
logout - 是我自定义的注销操作。
{% load url from future %}
{{ protocol}}://{{ domain }}{% url 'auth_password_reset_confirm' uidb36=uid token=token %}
所以我必须将上面的auth_password_reset_confirm
更改为password_reset_confirm
。
对于Django 1.8+的用户,只需将此URL复制到您的主要urls.py文件中,以便它识别URL名称
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
'django.contrib.auth.views.password_reset_confirm',
name='password_reset_confirm'),
按照 @Lunulata 的建议,将以下内容添加到您的 password_reset_email.html 文件中:
{{ protocol }}://{{ domain }}{% url
'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}
尝试将以下内容添加到您的urls.py文件中
(r'^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset_confirm'),
只需将以下行添加到您的 urls.py 文件中即可:
url('^', include('django.contrib.auth.urls')),
这使得Django reset_password工作流程可用。
然后覆盖您的login.html文件以包含以下行:<div class="password-reset-link">
href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a></div>
现在,只要您的电子邮件设置已设置好,您就可以使用内置的Django PasswordResetView。
我发现这个有效,从默认的URL复制而来
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
auth_views.password_reset_confirm, name='password_reset_confirm'),
我的应用程序名称是landing而不是accounts。
from django.urls import path
from . import views
from django.contrib.auth import views as auth_views
from django.urls import reverse_lazy
app_name='landing'
urlpatterns = [
path('',views.home,name="home"),
path('terms/',views.terms,name="terms"),
path('login/',views.loginUser,name="login"),
path('signup/',views.signupUser,name="signup"),
path('about/',views.about,name="about"),
path('logout/',views.logoutUser,name="logout"),
path('password_reset/',
auth_views.PasswordResetView.as_view(template_name='landing/password_reset.html',success_url=reverse_lazy('landing:password_reset_done')),
name="password_reset"),
path('password_reset_sent/',
auth_views.PasswordResetDoneView.as_view(template_name='landing/password_reset_sent.html'),
name="password_reset_done"),
path('reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(template_name='landing/password_reset_form.html',success_url=reverse_lazy('landing:password_reset_complete')),
name="password_reset_confirm"),
path('password_reset_complete/',
auth_views.PasswordResetCompleteView.as_view(template_name='landing/password_reset_done.html'),
name="password_reset_complete"),
]
在你提到的URL名称前,必须使用app_name:这非常重要。