我想使用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>,+)/$']
答案 0 :(得分:0)
使用调用中的命名空间进行反转。
reverse('app_name:password_reset')
或者将密码重置URL移动到没有命名空间的单独urls.py。
答案 1 :(得分:0)
您可以在网址中传递post_reset_redirect
和email_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'),