首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoReverseMatch on password_Reset_confirm

NoReverseMatch on password_Reset_confirm
EN

Stack Overflow用户
提问于 2012-06-21 17:19:54
回答 5查看 10.7K关注 0票数 19

我有一个问题,让password_Reset_confirm位工作。

url:

代码语言:javascript
复制
(r'^password_reset/$', 'django.contrib.auth.views.password_reset'),
(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),
(r'^password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm'),

password_reset_email.html,,包括以下内容:

代码语言:javascript
复制
{% load url from future %}
Someone asked for password reset for email {{ email }}. Follow the link below:
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb36=uid token=token %}

但是,在提交了重新设置密码的电子邮件之后,我得到了如下错误消息:

NoReverseMatch at /password_reset/ password_reset_confirm()和关键字参数‘{’uidb36 36‘:'1','token':’38D-b5ec0b2a2321f522f954‘}的password_reset_confirm。

我想,既然这是一个视图中使用的构建,我就不用再做其他的事情了?

谢谢你的建议,

更新:

在使用完完整的路径之后,它似乎可以工作了。然而,它发送了两封电子邮件:每一封都有一个不同的链接。为什么会这样呢?在哪里设置{域}?谢谢

代码语言:javascript
复制
Follow the link below:
http://example.com/password_reset_confirm/1-38d-b5ec0b2a2321f522f954/

Follow the link below:
http://example.com/password_reset_confirm/2-38d-18482e1f129c84b9c2bc/

更新2

我想通了。以防别人有这个问题。您需要将您的域名设置为应用程序的站点:

在Admin或django控制台中:

代码语言:javascript
复制
>>> my_site = Site.objects.get(pk=1)
>>> my_site.domain = 'somedomain.com'
>>> my_site.name = 'Some Domain'
>>> my_site.save()

另一个问题,为什么你可以得到两封电子邮件时,重置它,因为你可以有多个用户名与相同的电子邮件地址。挺傻的。这是我要解决的下一件事。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-22 17:17:21

当使用url模板标记时,您需要指定视图,而不是url本身。由于在您的'django.contrib.auth.views.password_reset_confirm'中使用的是URLConf,所以您应该这样使用它:

代码语言:javascript
复制
{% url 'django.contrib.auth.views.password_reset_confirm' ... %}

有关Django的url文档中的内置模板标记和过滤器模板标记的更多信息。

票数 5
EN

Stack Overflow用户

发布于 2014-04-30 10:03:35

若要将url传递给url模板标记,可以将name指定给urls.py中的url。

代码语言:javascript
复制
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 
views.password_reset_confirm, name='password_reset_confirm'),

然后,您可以使用带有url名称的标记。

代码语言:javascript
复制
{% url 'password_reset_confirm' uidb64=uid token=token %}
票数 12
EN

Stack Overflow用户

发布于 2017-01-20 14:14:46

一定要在您的urls.py中包含以下内容:

代码语言:javascript
复制
urlpatterns = [
    url('^', include('django.contrib.auth.urls'))
]

参见重置部分:身份验证视图

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11143393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档