Django:反向是没有解析内置密码重置的URL

时间:2016-09-16 11:56:22

标签: django django-urls

我想使用Django的内置密码重置。 我的urls.py如下。

app_name = 'recruiter'

urlpatterns= [
#urls
]

urlpatterns += [
url(r'^password_reset_done/$', password_reset_done, name='password_reset_done'),
url(r'^password_reset/$', password_reset, name='password_reset'),
url(r'^password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>,+)/$', password_reset_confirm, name='password_reset_confirm'),
url(r'^password_reset_complete/$', password_reset_complete, name='password_reset_complete'),
]

如果我这样做,那么它就会在这一内置函数中出错。

reverse('password_reset')

如果我删除app_name = 'recruiter',那么它工作正常,但其他应用功能的名称空间被移除。我该如何解决这个问题?

此外,如果我删除app_name = 'recruiter'并尝试重置密码,那么在提交电子邮件后我就会收到错误。

{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

错误就像:

NoReverseMatch at /recruiter/password_reset/

Reverse for 'password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'Mw', u'token': u'4fd-f1aeba7ed3a5410a30da'}' not found. 1 pattern(s) tried: ['recruiter/password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>,+)/$']

2 个答案:

答案 0 :(得分:0)

使用调用中的命名空间进行反转。

reverse('app_name:password_reset')

或者将密码重置URL移动到没有命名空间的单独urls.py。

答案 1 :(得分:0)

您可以在网址中传递post_reset_redirectemail_template_name作为参数:

url(r'^password_reset/$', password_reset, {'email_template_name': 'recruiter/password_reset_email.html', 'post_reset_redirect': 'recruiter:password_reset_done'}, name='password_reset'),

现在它将重定向到recruiter:password_reset_done,您可以在recruiter/templates/recruiter/password_reset_email.html中使用自己的电子邮件模板,并使用password_reset_confirm的正确名称空间:

{{ protocol }}://{{ domain }}{% url 'recruiter:password_reset_confirm' uidb64=uid token=token %}

请注意,您也可以将template_name传递给网址,以使用您自己的密码重置模板:

url(r'^password_reset/$', password_reset, {'template_name': 'recruiter/password_reset.html', 'email_template_name': 'recruiter/password_reset_email.html', 'post_reset_redirect': 'recruiter:password_reset_done'}, name='password_reset'),