docs: def profile_edit(request, username, edit_profile_form=EditProfileForm,
                   template_name='accounts/profile_form.html', success_url=None,
                   extra_context=None, **kwargs):
      """
      Edit profile.
  
      Edits a profile selected by the supplied username. First checks
      permissions if the user is allowed to edit this profile, if denied will
      show a 404. When the profile is successfully edited will redirect to
      ``success_url``.
  
      :param username:
          Username of the user which profile should be edited.
  
      :param edit_profile_form:
  
          Form that is used to edit the profile. The :func:`EditProfileForm.save`
          method of this form will be called when the form
          :func:`EditProfileForm.is_valid`.  Defaults to :class:`EditProfileForm`
          from accounts.
  
      :param template_name:
          String of the template that is used to render this view. Defaults to
          ``accounts/edit_profile_form.html``.
  
      :param success_url:
          Named URL which will be passed on to a django ``reverse`` function
          after the form is successfully saved. Defaults to the
          ``accounts_detail`` url.
  
      :param extra_context:
          Dictionary containing variables that are passed on to the
          ``template_name`` template.  ``form`` key will always be the form used
          to edit the profile, and the ``profile`` key is always the edited
          profile.
  
      **Context**
  
      ``form``
          Form that is used to alter the profile.
  
      ``profile``
          Instance of the ``Profile`` that is edited.
  
      """
      user = get_object_or_404(get_user_model(),
                               username__iexact=username)
  
      profile = user.get_profile()
  
      user_initial = {'first_name': user.first_name,
                      'last_name': user.last_name}
  
      form = edit_profile_form(instance=profile, initial=user_initial)
  
      if request.method == 'POST':
          form = edit_profile_form(request.POST, request.FILES, instance=profile,
                                   initial=user_initial)
  
          if form.is_valid():
              profile = form.save()
  
              if accounts_settings.ACCOUNTS_USE_MESSAGES:
                  messages.success(request, _('Your profile has been updated.'),
                                   fail_silently=True)
  
              if success_url:
                  redirect_to = success_url
              else:
                  redirect_to = reverse('accounts_profile_detail',
                                        kwargs={'username': username})
              return redirect(redirect_to)
  
      if not extra_context:
          extra_context = dict()
      extra_context['form'] = form
      extra_context['profile'] = profile
      return ExtraContextTemplateView.as_view(template_name=template_name,
                                          extra_context=extra_context)(request)