#32349: unable to obtain auth template password_reset_done when using namespaced urls ----------------------------------+-------------------------------------- Reporter: millerthegorilla | Owner: nobody Type: Bug | Status: new Component: Template system | Version: 3.1 Severity: Normal | Resolution: Keywords: password_reset | Triage Stage: Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 ----------------------------------+-------------------------------------- Description changed by millerthegorilla:
Old description: > Hi, > > Whilst setting up a users app, I found that if I namespaced my urls, ie : > {{{ > <django_users_app/urls.py> > app_name = 'django_users_app' > urlpatterns = [ > path('accounts/', include('django.contrib.auth.urls')), > path('login/', UserLoginView.as_view(), name='login'), > path('dashboard/', DashboardView.as_view(), name='dashboard'), > path('register/', RegisterView.as_view(), name='register'), > path('profile/', ProfileView.as_view(), name='profile') > ] > }}} > Then when I completed a password reset accessed from a link on the login > page, the server crapped out and informed me that: > > Reverse for 'password_reset_done' not found. 'password_reset_done' is > not a valid view function or pattern name. > > I discovered that in django.contrib.auth.views the class > PasswordResetView(PasswordContextMixin, FormView): has a success_url of: > > reverse_lazy('password_reset_done') > > When I edit the code and replace the above with > reverse_lazy('django_users_app:password_reset_done') the correct template > is returned. > > If I do not edit the code, but instead remove the namespace and its > reference in all my files, then the correct template is returned. > > I want to know if it is possible to use a namespace with a users app that > references the contrib.auth password reset templates. > > There is conflicting information on the internet regarding this issue and > no clear indication that I can see in the django docs. > > Also, in my settings file, I have the following setting defined: > > EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' > > Yet when I use reset the password, I do not see any email sent. I don't > know if this is a related error. > > Below is the traceback information from the page when password_reset_done > cannot be found: > {{{ > Environment: > > Request Method: POST > Request URL: > http://127.0.0.1:8000/users/accounts/password_reset/?next=/users/login/ > > Django Version: 3.1.5 > Python Version: 3.9.1 > Installed Applications: > ['django_users_app', > 'django.contrib.admin', > 'django.contrib.auth', > 'django.contrib.contenttypes', > 'django.contrib.sessions', > 'django.contrib.messages', > 'django.contrib.staticfiles', > 'django_email_verification', > 'captcha'] > Installed Middleware: > ['django.middleware.security.SecurityMiddleware', > 'django.contrib.sessions.middleware.SessionMiddleware', > 'django.middleware.common.CommonMiddleware', > 'django.middleware.csrf.CsrfViewMiddleware', > 'django.contrib.auth.middleware.AuthenticationMiddleware', > 'django.contrib.messages.middleware.MessageMiddleware', > 'django.middleware.clickjacking.XFrameOptionsMiddleware'] > > > Traceback (most recent call last): > File "/usr/local/lib/python3.9/site- > packages/django/core/handlers/exception.py", line 47, in inner > response = get_response(request) > File "/usr/local/lib/python3.9/site- > packages/django/core/handlers/base.py", line 181, in _get_response > response = wrapped_callback(request, *callback_args, > **callback_kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/views/generic/base.py", line 70, in view > return self.dispatch(request, *args, **kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/utils/decorators.py", line 43, in _wrapper > return bound_method(*args, **kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/utils/decorators.py", line 130, in _wrapped_view > response = view_func(request, *args, **kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/contrib/auth/views.py", line 222, in dispatch > return super().dispatch(*args, **kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/views/generic/base.py", line 98, in dispatch > return handler(request, *args, **kwargs) > File "/usr/local/lib/python3.9/site- > packages/django/views/generic/edit.py", line 142, in post > return self.form_valid(form) > File "/usr/local/lib/python3.9/site- > packages/django/contrib/auth/views.py", line 236, in form_valid > return super().form_valid(form) > File "/usr/local/lib/python3.9/site- > packages/django/views/generic/edit.py", line 57, in form_valid > return HttpResponseRedirect(self.get_success_url()) > File "/usr/local/lib/python3.9/site- > packages/django/views/generic/edit.py", line 51, in get_success_url > if not self.success_url: > File "/usr/local/lib/python3.9/site- > packages/django/utils/functional.py", line 135, in __wrapper__ > res = func(*self.__args, **self.__kw) > File "/usr/local/lib/python3.9/site-packages/django/urls/base.py", line > 87, in reverse > return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, > **kwargs)) > File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", > line 685, in _reverse_with_prefix > raise NoReverseMatch(msg) > > Exception Type: NoReverseMatch at /users/accounts/password_reset/ > Exception Value: Reverse for 'password_reset_done' not found. > 'password_reset_done' is not a valid view function or pattern name. > }}} New description: Hi, Whilst setting up a users app, I found that if I namespaced my urls, ie : {{{ <django_users_app/urls.py> app_name = 'django_users_app' urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), path('login/', UserLoginView.as_view(), name='login'), path('dashboard/', DashboardView.as_view(), name='dashboard'), path('register/', RegisterView.as_view(), name='register'), path('profile/', ProfileView.as_view(), name='profile') ] }}} Then when I completed a password reset accessed from a link on the login page, the server crapped out and informed me that: Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name. All my other password reset views work though. I discovered that in django.contrib.auth.views the class PasswordResetView(PasswordContextMixin, FormView): has a success_url of: reverse_lazy('password_reset_done') When I edit the code and replace the above with reverse_lazy('django_users_app:password_reset_done') the correct template is returned. If I do not edit the code, but instead remove the namespace and its reference in all my files, then the correct template is returned. I want to know if it is possible to use a namespace with a users app that references the contrib.auth password reset templates. There is conflicting information on the internet regarding this issue and no clear indication that I can see in the django docs. Also, in my settings file, I have the following setting defined: EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' Yet when I use reset the password, I do not see any email sent. I don't know if this is a related error. Below is the traceback information from the page when password_reset_done cannot be found: {{{ Environment: Request Method: POST Request URL: http://127.0.0.1:8000/users/accounts/password_reset/?next=/users/login/ Django Version: 3.1.5 Python Version: 3.9.1 Installed Applications: ['django_users_app', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_email_verification', 'captcha'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback (most recent call last): File "/usr/local/lib/python3.9/site- packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/local/lib/python3.9/site- packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.9/site- packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, **kwargs) File "/usr/local/lib/python3.9/site- packages/django/utils/decorators.py", line 43, in _wrapper return bound_method(*args, **kwargs) File "/usr/local/lib/python3.9/site- packages/django/utils/decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "/usr/local/lib/python3.9/site- packages/django/contrib/auth/views.py", line 222, in dispatch return super().dispatch(*args, **kwargs) File "/usr/local/lib/python3.9/site- packages/django/views/generic/base.py", line 98, in dispatch return handler(request, *args, **kwargs) File "/usr/local/lib/python3.9/site- packages/django/views/generic/edit.py", line 142, in post return self.form_valid(form) File "/usr/local/lib/python3.9/site- packages/django/contrib/auth/views.py", line 236, in form_valid return super().form_valid(form) File "/usr/local/lib/python3.9/site- packages/django/views/generic/edit.py", line 57, in form_valid return HttpResponseRedirect(self.get_success_url()) File "/usr/local/lib/python3.9/site- packages/django/views/generic/edit.py", line 51, in get_success_url if not self.success_url: File "/usr/local/lib/python3.9/site- packages/django/utils/functional.py", line 135, in __wrapper__ res = func(*self.__args, **self.__kw) File "/usr/local/lib/python3.9/site-packages/django/urls/base.py", line 87, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 685, in _reverse_with_prefix raise NoReverseMatch(msg) Exception Type: NoReverseMatch at /users/accounts/password_reset/ Exception Value: Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name. }}} -- -- Ticket URL: <https://code.djangoproject.com/ticket/32349#comment:1> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/074.af989287346e56b9f3a9bae2682d7933%40djangoproject.com.