From Classy Class Based Views PasswordChangeDoneView

Render a template. Pass keyword arguments from the URLconf to the context.


  • template_name: Much like the LogoutView the default view is the Django skin. Create your own password_change_done.html file to keep the user experience consistent across the site.
  • title: the default uses the function gettext_lazy() and passes the string ‘Password change successful’. The function gettext_lazy() will translate the text into the local language if a translation is available. I’d just keep the default on this.


class myPasswordChangeDoneView(PasswordChangeDoneView):

path('password_change_done_view/', views.myPasswordChangeDoneView.as_view(), name='password_change_done_view'),


{% extends "base.html" %}
{% load i18n %}

{% block content %}
    {% block title %}
        {{ title }}
    {% endblock %}
<p>{% trans "Password changed" %}</p>
{% endblock %}

LOGIN_URL = '/<app_name>/login_view/'

The above assumes that have this set up in your

Special Notes

You need to set the URL_LOGIN value in your It defaults to /accounts/login/. If that path isn’t valid you’ll get a 404 error.


A visual representation of how PasswordChangeDoneView is derived can be seen here:



Again, not much to do here. Let Django do all of the heavy lifting, but be mindful of the needed work in and the new template you’ll need/want to create