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 )
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 , 2 years ago
Description: | modified (diff) |
---|---|
Summary: | PasswordResetView and PasswordResetConfirmView not discovering custom template → PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, & PasswordResetCompleteView not discovering custom template |
comment:3 by , 2 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Summary: | PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, & PasswordResetCompleteView not discovering custom template → PasswordResetView, 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.
I realized this issue affects all four views involved in the password reset flow.