'Displays the main admin index page, which lists all of the installed
apps that have been registered in this site.'

@never_cache
def index(self, request, extra_context=None):

    app_dict = {}
    user = request.user
    for (model, model_admin) in self._registry.items():
        app_label = model._meta.app_label
        has_module_perms = user.has_module_perms(app_label)
        if has_module_perms:
            perms = model_admin.get_model_perms(request)
            if (True in perms.values()):
                model_dict = {'name': capfirst(model._meta.verbose_name_plural), 'admin_url': mark_safe(('%s/%s/' % (app_label, model.__name__.lower()))), 'perms': perms}
                if (app_label in app_dict):
                    app_dict[app_label]['models'].append(model_dict)
                else:
                    app_dict[app_label] = {'name': app_label.title(), 'app_url': (app_label + '/'), 'has_module_perms': has_module_perms, 'models': [model_dict]}
    app_list = app_dict.values()
    app_list.sort(key=(lambda x: x['name']))
    for app in app_list:
        app['models'].sort(key=(lambda x: x['name']))
    context = {'title': _('Site    administration'), 'app_list': app_list, 'root_path': self.root_path}
    context.update((extra_context or {}))
    context_instance = template.RequestContext(request, current_app=self.name)
    return render_to_response((self.index_template or 'admin/index.html'), context, context_instance=context_instance)
