Skip to content Skip to sidebar Skip to footer

NoReverseMatch Errors During Django Forgot Password Email System

I am trying to create a system for resetting forgotten passwords through email but am getting some errors. My urls are: from django.contrib.auth import views as auth_views urlpatt

Solution 1:

I don't know if this is still possible in newer Djangos, but in previous versions we've done this:

# django login views
urlpatterns += patterns(
    'django.contrib.auth.views',
    url(r'^logout/$',
        'logout',
        dict(
            template_name='my/logout.html',
            redirect_field_name='next',
        )),

    url(r'^password-reset/$',
        'password_reset',
        dict(
            template_name='my/password-reset-form.html',
            email_template_name='my/password-reset-email.html',
            subject_template_name='my/password-reset-email-subject.html',
            from_email=settings.FROM_EPOST,
        ),
        name="my-password-reset"),

    url(r'^password-reset-done/$',
        'password_reset_done',
        dict(
            template_name='my/password-reset-done.html',
        )),

    url(r'^password-reset-confirm/(?P<uidb64>.+)/(?P<token>.+)/$',
        'password_reset_confirm',
        dict(
            template_name='my/password-reset-confirm.html',
            # post_reset_redirect='url',
        )),

    url(r'^password-reset-complete/$',
        'password_reset_complete',
        dict(
            template_name='my/password-reset-complete.html',
        )),
)

I seem to remember there was an issue with having slashes in these urls, but it's been a long time since I wrote those..

The email template contains:

{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}
{% endblock %}

Solution 2:

you are getting no reversematch because the password_reset function is redirecting to ('password_reset_done') instead of your app namespace for full detail you can check the docs in here

for instance if your include url for election app looks like that :

urlpatterns = [
    url(r'election', include(election.urls, namespace="SomeName")),

]

you can solve the problem by removing the name/namespace in your include url or need you need to override the password_reset function. from django.contrib.auth.view import password_reset

#views.py
def new_password_reset(password_reset):
    if post_reset_redirect is None:
        post_reset_redirect = reverse('SomeName:password_reset_done')

    return TemplateResponse(request, template_name, context) 

#urls.py
from election import views as election_views
#and in your urls change that url:
url(r'^password_reset/$', auth_views.password_reset, name='password_reset')

#with that url :
url(r'^password_reset/$', election_views.new_password_reset, name='password_reset')

and you should be all right


Post a Comment for "NoReverseMatch Errors During Django Forgot Password Email System"