Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 17916)
+++ django/contrib/admin/options.py	(working copy)
@@ -212,6 +212,9 @@
         """
         return self.prepopulated_fields
 
+    def get_context_data(self, **kwargs):
+        return kwargs
+
     def queryset(self, request):
         """
         Returns a QuerySet of all model instances that can be edited by the
@@ -736,6 +739,7 @@
         opts = self.model._meta
         app_label = opts.app_label
         ordered_objects = opts.get_ordered_objects()
+        context = self.get_context_data(**context)
         context.update({
             'add': add,
             'change': change,
@@ -994,7 +998,7 @@
             inline_admin_formsets.append(inline_admin_formset)
             media = media + inline_admin_formset.media
 
-        context = {
+        context = self.get_context_data(**{
             'title': _('Add %s') % force_unicode(opts.verbose_name),
             'adminform': adminForm,
             'is_popup': "_popup" in request.REQUEST,
@@ -1003,7 +1007,7 @@
             'inline_admin_formsets': inline_admin_formsets,
             'errors': helpers.AdminErrorList(form, formsets),
             'app_label': opts.app_label,
-        }
+        })
         context.update(extra_context or {})
         return self.render_change_form(request, context, form_url=form_url, add=True)
 
@@ -1085,7 +1089,7 @@
             inline_admin_formsets.append(inline_admin_formset)
             media = media + inline_admin_formset.media
 
-        context = {
+        context = self.get_context_data(**{
             'title': _('Change %s') % force_unicode(opts.verbose_name),
             'adminform': adminForm,
             'object_id': object_id,
@@ -1095,7 +1099,7 @@
             'inline_admin_formsets': inline_admin_formsets,
             'errors': helpers.AdminErrorList(form, formsets),
             'app_label': opts.app_label,
-        }
+        })
         context.update(extra_context or {})
         return self.render_change_form(request, context, change=True, obj=obj, form_url=form_url)
 
@@ -1228,7 +1232,7 @@
         selection_note_all = ungettext('%(total_count)s selected',
             'All %(total_count)s selected', cl.result_count)
 
-        context = {
+        context = self.get_context_data(**{
             'module_name': force_unicode(opts.verbose_name_plural),
             'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
             'selection_note_all': selection_note_all % {'total_count': cl.result_count},
@@ -1242,7 +1246,7 @@
             'actions_on_top': self.actions_on_top,
             'actions_on_bottom': self.actions_on_bottom,
             'actions_selection_counter': self.actions_selection_counter,
-        }
+        })
         context.update(extra_context or {})
 
         return TemplateResponse(request, self.change_list_template or [
@@ -1296,7 +1300,7 @@
         else:
             title = _("Are you sure?")
 
-        context = {
+        context = self.get_context_data(**{
             "title": title,
             "object_name": object_name,
             "object": obj,
@@ -1305,7 +1309,7 @@
             "protected": protected,
             "opts": opts,
             "app_label": app_label,
-        }
+        })
         context.update(extra_context or {})
 
         return TemplateResponse(request, self.delete_confirmation_template or [
@@ -1326,14 +1330,14 @@
         ).select_related().order_by('action_time')
         # If no history was found, see whether this object even exists.
         obj = get_object_or_404(model, pk=unquote(object_id))
-        context = {
+        context = self.get_context_data(**{
             'title': _('Change history: %s') % force_unicode(obj),
             'action_list': action_list,
             'module_name': capfirst(force_unicode(opts.verbose_name_plural)),
             'object': obj,
             'app_label': app_label,
             'opts': opts,
-        }
+        })
         context.update(extra_context or {})
         return TemplateResponse(request, self.object_history_template or [
             "admin/%s/%s/object_history.html" % (app_label, opts.object_name.lower()),
Index: django/contrib/admin/sites.py
===================================================================
--- django/contrib/admin/sites.py	(revision 17916)
+++ django/contrib/admin/sites.py	(working copy)
@@ -128,6 +128,9 @@
         """
         return self._global_actions[name]
 
+    def get_context_data(self, **kwargs):
+        return kwargs
+
     @property
     def actions(self):
         """
@@ -270,7 +273,7 @@
         from django.contrib.auth.views import password_change_done
         defaults = {
             'current_app': self.name,
-            'extra_context': extra_context or {},
+            'extra_context': self.get_context_data(**(extra_context or {})),
         }
         if self.password_change_done_template is not None:
             defaults['template_name'] = self.password_change_done_template
@@ -299,7 +302,7 @@
         from django.contrib.auth.views import logout
         defaults = {
             'current_app': self.name,
-            'extra_context': extra_context or {},
+            'extra_context': self.get_context_data(**(extra_context or {})),
         }
         if self.logout_template is not None:
             defaults['template_name'] = self.logout_template
@@ -311,11 +314,11 @@
         Displays the login form for the given HttpRequest.
         """
         from django.contrib.auth.views import login
-        context = {
+        context = self.get_context_data(**{
             'title': _('Log in'),
             'app_path': request.get_full_path(),
             REDIRECT_FIELD_NAME: request.get_full_path(),
-        }
+        })
         context.update(extra_context or {})
         defaults = {
             'extra_context': context,
@@ -376,10 +379,10 @@
         for app in app_list:
             app['models'].sort(key=lambda x: x['name'])
 
-        context = {
+        context = self.get_context_data(**{
             'title': _('Site administration'),
             'app_list': app_list,
-        }
+        })
         context.update(extra_context or {})
         return TemplateResponse(request, [
             self.index_template or 'admin/index.html',
@@ -428,10 +431,10 @@
             raise Http404('The requested admin page does not exist.')
         # Sort the models alphabetically within each app.
         app_dict['models'].sort(key=lambda x: x['name'])
-        context = {
+        context = self.get_context_data(**{
             'title': _('%s administration') % capfirst(app_label),
             'app_list': [app_dict],
-        }
+        })
         context.update(extra_context or {})
 
         return TemplateResponse(request, self.app_index_template or [
