Index: django/contrib/auth/views.py
===================================================================
--- django/contrib/auth/views.py	(revision 6206)
+++ django/contrib/auth/views.py	(working copy)
@@ -1,3 +1,7 @@
+__all__ = ('login', 'logout', 'logout_then_login', 'redirect_to_login',
+        'password_reset', 'password_reset_done', 'password_change',
+        'password_change_done')
+
 from django.contrib.auth.forms import AuthenticationForm
 from django.contrib.auth.forms import PasswordResetForm, PasswordChangeForm
 from django import oldforms
@@ -9,7 +13,15 @@
 from django.contrib.auth import REDIRECT_FIELD_NAME
 from django.utils.translation import ugettext as _
 
-def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME):
+def update_context_from_extra(context, extra_context):
+    if extra_context is None: extra_context = {}
+    for key, value in extra_context.items():
+        if callable(value):
+            context[key] = value()
+        else:
+            context[key] = value
+
+def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME, extra_context=None):
     "Displays the login form and handles the login action."
     manipulator = AuthenticationForm(request)
     redirect_to = request.REQUEST.get(redirect_field_name, '')
@@ -33,18 +45,24 @@
     else:
         current_site = RequestSite(request)
 
-    return render_to_response(template_name, {
+    context = {
         'form': oldforms.FormWrapper(manipulator, request.POST, errors),
         redirect_field_name: redirect_to,
         'site_name': current_site.name,
-    }, context_instance=RequestContext(request))
+    }
+    update_context_from_extra(context, extra_context)
 
-def logout(request, next_page=None, template_name='registration/logged_out.html'):
+    return render_to_response(template_name, context,
+        context_instance=RequestContext(request))
+
+def logout(request, next_page=None, template_name='registration/logged_out.html', extra_context=None):
     "Logs out the user and displays 'You are logged out' message."
     from django.contrib.auth import logout
     logout(request)
     if next_page is None:
-        return render_to_response(template_name, {'title': _('Logged out')}, context_instance=RequestContext(request))
+        context = {'title': _('Logged out')}
+        update_context_from_extra(context, extra_context)
+        return render_to_response(template_name, context, context_instance=RequestContext(request))
     else:
         # Redirect to this page until the session has been cleared.
         return HttpResponseRedirect(next_page or request.path)
@@ -64,7 +82,7 @@
     return HttpResponseRedirect('%s?%s=%s' % (login_url, redirect_field_name, next))
 
 def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',
-        email_template_name='registration/password_reset_email.html'):
+        email_template_name='registration/password_reset_email.html', extra_context=None):
     new_data, errors = {}, {}
     form = PasswordResetForm()
     if request.POST:
@@ -76,13 +94,17 @@
             else:
                 form.save(email_template_name=email_template_name)
             return HttpResponseRedirect('%sdone/' % request.path)
-    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
+    context = {'form': oldforms.FormWrapper(form, new_data, errors)}
+    update_context_from_extra(context, extra_context)
+    return render_to_response(template_name, context,
         context_instance=RequestContext(request))
 
-def password_reset_done(request, template_name='registration/password_reset_done.html'):
-    return render_to_response(template_name, context_instance=RequestContext(request))
+def password_reset_done(request, template_name='registration/password_reset_done.html', extra_context=None):
+    context = {}
+    update_context_from_extra(context, extra_context)
+    return render_to_response(template_name, context, context_instance=RequestContext(request))
 
-def password_change(request, template_name='registration/password_change_form.html'):
+def password_change(request, template_name='registration/password_change_form.html', extra_context=None):
     new_data, errors = {}, {}
     form = PasswordChangeForm(request.user)
     if request.POST:
@@ -91,9 +113,11 @@
         if not errors:
             form.save(new_data)
             return HttpResponseRedirect('%sdone/' % request.path)
-    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
+    context = {'form': oldforms.FormWrapper(form, new_data, errors)}
+    update_context_from_extra(context, extra_context)
+    return render_to_response(template_name, context,
         context_instance=RequestContext(request))
 password_change = login_required(password_change)
 
-def password_change_done(request, template_name='registration/password_change_done.html'):
+def password_change_done(request, template_name='registration/password_change_done.html', extra_context=None):
     return render_to_response(template_name, context_instance=RequestContext(request))
