Opened 2 years ago

Last modified 2 years ago

#34003 closed Uncategorized

PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, & PasswordResetCompleteView not discovering custom template — at Version 1

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(
        template_name="accounts/password_reset_done.html",
    ),
    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 (1)

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.

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