Opened 2 years ago

Closed 2 years ago

#34003 closed Uncategorized (invalid)

PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView & PasswordResetCompleteView not discovering custom template

Reported by: Brylie Christopher Oxley Owned by: nobody
Component: contrib.auth Version: 4.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Brylie Christopher Oxley)

While defining URLs for a user password reset flow, I am using standard Django views such as PasswordResetView.

path(
    "password_reset/",
    django.contrib.auth.views.PasswordResetView.as_view(),
    name="password_reset",
),
path(
    "password_reset/done/",
    auth_views.PasswordResetDoneView.as_view(),
    name="password_reset_done",
),
path(
    "reset/<uidb64>/<token>/",
    auth_views.PasswordResetConfirmView.as_view(),
    name="password_reset_confirm",
),
path(
    "reset/done/",
    auth_views.PasswordResetCompleteView.as_view(),
    name="password_reset_complete",
),

The PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView and PasswordResetCompleteView docs say Django will look for templates called registration/* and render those if available.

When I define templates with the documented name and location, the custom templates are not discovered by Django. Instead, the default Django Admin templates are rendered. This is despite other built in views like LoginView being able to fine conventionally named templates in the same directory.

Of note, the problematic views are all part of the password reset flow.

In order to work around the issue, I have had to move the custom template to a different template path specified via the template_name argument to the PasswordResetView:

path(
    "password_reset/",
    django.contrib.auth.views.PasswordResetView.as_view(
        template_name="accounts/password_reset_form.html",
    ),
    name="password_reset",
),
path(
    "password_reset/done/",
    auth_views.PasswordResetDoneView.as_view(),
    name="password_reset_done",
),
path(
    "reset/<uidb64>/<token>/",
    auth_views.PasswordResetConfirmView.as_view(
        template_name="accounts/password_reset_confirm.html",
    ),
    name="password_reset_confirm",
),
path(
    "reset/done/",
    auth_views.PasswordResetCompleteView.as_view(
        template_name="accounts/password_reset_complete.html",
    ),
    name="password_reset_complete",
),

In honesty, it is very possible that I have made a typo in the file name, but I have tried multiple times with the same result.

Change History (3)

comment:1 by Brylie Christopher Oxley, 2 years ago

Description: modified (diff)
Summary: PasswordResetView and PasswordResetConfirmView not discovering custom templatePasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, & PasswordResetCompleteView not discovering custom template

I realized this issue affects all four views involved in the password reset flow.

comment:2 by Brylie Christopher Oxley, 2 years ago

Description: modified (diff)

Fix typo

comment:3 by Mariusz Felisiak, 2 years ago

Resolution: invalid
Status: newclosed
Summary: PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, & PasswordResetCompleteView not discovering custom templatePasswordResetView, PasswordResetDoneView, PasswordResetConfirmView & PasswordResetCompleteView not discovering custom template

Thanks for this report, however it works for me. It's also tested in auth_tests. Please use one of support channels.

Note: See TracTickets for help on using tickets.
Back to Top