我在使用password_Reset_confirm位工作时遇到问题。
URL:
(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 ,其中包括:
{% 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 / Reverse for 带有参数'()'和关键字参数的'password_reset_confirm' '{'uidb36':'1','令牌':'38d-b5ec0b2a2321f522f954'}'找不到。
我认为既然这是在视图中使用构建,我就不必关注其他任何事情了吗?
感谢您的建议,
更新
使用完整路径后,它似乎工作。但是它会发送两封电子邮件:每封都有不同的链接。这是为什么?我在哪里设置{{domain}}?感谢
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控制台中:
>>> my_site = Site.objects.get(pk=1)
>>> my_site.domain = 'somedomain.com'
>>> my_site.name = 'Some Domain'
>>> my_site.save()
为什么在重置时可以收到两封电子邮件的另一个问题是,您可以将多个用户名与同一个电子邮件地址相关联。它非常愚蠢。这是我必须解决的下一件事。
答案 0 :(得分:10)
要将网址传递到url
模板标记,您可以为name
urls.py
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 'password_reset_confirm' uidb64=uid token=token %}
答案 1 :(得分:4)
使用url
模板标记时,您需要指定视图而不是网址本身。由于您在URLConf中使用'django.contrib.auth.views.password_reset_confirm'
,因此您应该像这样使用它:
{% url 'django.contrib.auth.views.password_reset_confirm' ... %}
有关Django Built-in template tags and filters文档中url
模板标记的更多信息。
答案 2 :(得分:0)
它可能是内置视图,但您仍需要一个URL。您应该在urls.py中定义一个并将其链接到password_reset_confirm
视图。
答案 3 :(得分:0)
只需将此网址复制到主urls.py文件中,即可识别网址名称
URL(R&#39;?^复位/(P [0-9A-ZA-Z _-] +)/(P [0-9A-ZA-Z] {1,13} - [0-9A -Za-Z] {1,20})/ $&#39 ;, &#39; django.contrib.auth.views.password_reset_confirm&#39 ;, 名称=&#39; password_reset_confirm&#39),
答案 4 :(得分:0)
请务必在您的urls.py中填写此内容:
urlpatterns = [
url('^', include('django.contrib.auth.urls'))
]
参见https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.views.password_reset 部分:身份验证视图