mirror of
https://github.com/django/django.git
synced 2025-06-04 02:59:13 +00:00
Removed code duplication between AdminSite.index() and app_index().
This commit is contained in:
parent
a429a502ea
commit
bcf700b4e3
@ -394,53 +394,80 @@ class AdminSite(object):
|
|||||||
}
|
}
|
||||||
return login(request, **defaults)
|
return login(request, **defaults)
|
||||||
|
|
||||||
|
def _build_app_dict(self, request, label=None):
|
||||||
|
"""
|
||||||
|
Builds the app dictionary. Takes an optional label parameters to filter
|
||||||
|
models of a specific app.
|
||||||
|
"""
|
||||||
|
app_dict = {}
|
||||||
|
|
||||||
|
if label:
|
||||||
|
models = {
|
||||||
|
m: m_a for m, m_a in self._registry.items()
|
||||||
|
if m._meta.app_label == label
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
models = self._registry
|
||||||
|
|
||||||
|
for model, model_admin in models.items():
|
||||||
|
app_label = model._meta.app_label
|
||||||
|
|
||||||
|
has_module_perms = model_admin.has_module_permission(request)
|
||||||
|
if not has_module_perms:
|
||||||
|
if label:
|
||||||
|
raise PermissionDenied
|
||||||
|
continue
|
||||||
|
|
||||||
|
perms = model_admin.get_model_perms(request)
|
||||||
|
|
||||||
|
# Check whether user has any perm for this module.
|
||||||
|
# If so, add the module to the model_list.
|
||||||
|
if True not in perms.values():
|
||||||
|
continue
|
||||||
|
|
||||||
|
info = (app_label, model._meta.model_name)
|
||||||
|
model_dict = {
|
||||||
|
'name': capfirst(model._meta.verbose_name_plural),
|
||||||
|
'object_name': model._meta.object_name,
|
||||||
|
'perms': perms,
|
||||||
|
}
|
||||||
|
if perms.get('change'):
|
||||||
|
try:
|
||||||
|
model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name)
|
||||||
|
except NoReverseMatch:
|
||||||
|
pass
|
||||||
|
if perms.get('add'):
|
||||||
|
try:
|
||||||
|
model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name)
|
||||||
|
except NoReverseMatch:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if app_label in app_dict:
|
||||||
|
app_dict[app_label]['models'].append(model_dict)
|
||||||
|
else:
|
||||||
|
app_dict[app_label] = {
|
||||||
|
'name': apps.get_app_config(app_label).verbose_name,
|
||||||
|
'app_label': app_label,
|
||||||
|
'app_url': reverse(
|
||||||
|
'admin:app_list',
|
||||||
|
kwargs={'app_label': app_label},
|
||||||
|
current_app=self.name,
|
||||||
|
),
|
||||||
|
'has_module_perms': has_module_perms,
|
||||||
|
'models': [model_dict],
|
||||||
|
}
|
||||||
|
|
||||||
|
if label:
|
||||||
|
return app_dict.get(label)
|
||||||
|
return app_dict
|
||||||
|
|
||||||
@never_cache
|
@never_cache
|
||||||
def index(self, request, extra_context=None):
|
def index(self, request, extra_context=None):
|
||||||
"""
|
"""
|
||||||
Displays the main admin index page, which lists all of the installed
|
Displays the main admin index page, which lists all of the installed
|
||||||
apps that have been registered in this site.
|
apps that have been registered in this site.
|
||||||
"""
|
"""
|
||||||
app_dict = {}
|
app_dict = self._build_app_dict(request)
|
||||||
for model, model_admin in self._registry.items():
|
|
||||||
app_label = model._meta.app_label
|
|
||||||
has_module_perms = model_admin.has_module_permission(request)
|
|
||||||
|
|
||||||
if has_module_perms:
|
|
||||||
perms = model_admin.get_model_perms(request)
|
|
||||||
|
|
||||||
# Check whether user has any perm for this module.
|
|
||||||
# If so, add the module to the model_list.
|
|
||||||
if True in perms.values():
|
|
||||||
info = (app_label, model._meta.model_name)
|
|
||||||
model_dict = {
|
|
||||||
'name': capfirst(model._meta.verbose_name_plural),
|
|
||||||
'object_name': model._meta.object_name,
|
|
||||||
'perms': perms,
|
|
||||||
}
|
|
||||||
if perms.get('change', False):
|
|
||||||
try:
|
|
||||||
model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name)
|
|
||||||
except NoReverseMatch:
|
|
||||||
pass
|
|
||||||
if perms.get('add', False):
|
|
||||||
try:
|
|
||||||
model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name)
|
|
||||||
except NoReverseMatch:
|
|
||||||
pass
|
|
||||||
if app_label in app_dict:
|
|
||||||
app_dict[app_label]['models'].append(model_dict)
|
|
||||||
else:
|
|
||||||
app_dict[app_label] = {
|
|
||||||
'name': apps.get_app_config(app_label).verbose_name,
|
|
||||||
'app_label': app_label,
|
|
||||||
'app_url': reverse(
|
|
||||||
'admin:app_list',
|
|
||||||
kwargs={'app_label': app_label},
|
|
||||||
current_app=self.name,
|
|
||||||
),
|
|
||||||
'has_module_perms': has_module_perms,
|
|
||||||
'models': [model_dict],
|
|
||||||
}
|
|
||||||
|
|
||||||
# Sort the apps alphabetically.
|
# Sort the apps alphabetically.
|
||||||
app_list = list(six.itervalues(app_dict))
|
app_list = list(six.itervalues(app_dict))
|
||||||
@ -463,52 +490,12 @@ class AdminSite(object):
|
|||||||
'admin/index.html', context)
|
'admin/index.html', context)
|
||||||
|
|
||||||
def app_index(self, request, app_label, extra_context=None):
|
def app_index(self, request, app_label, extra_context=None):
|
||||||
app_name = apps.get_app_config(app_label).verbose_name
|
app_dict = self._build_app_dict(request, app_label)
|
||||||
app_dict = {}
|
|
||||||
for model, model_admin in self._registry.items():
|
|
||||||
if app_label == model._meta.app_label:
|
|
||||||
has_module_perms = model_admin.has_module_permission(request)
|
|
||||||
if not has_module_perms:
|
|
||||||
raise PermissionDenied
|
|
||||||
|
|
||||||
perms = model_admin.get_model_perms(request)
|
|
||||||
|
|
||||||
# Check whether user has any perm for this module.
|
|
||||||
# If so, add the module to the model_list.
|
|
||||||
if True in perms.values():
|
|
||||||
info = (app_label, model._meta.model_name)
|
|
||||||
model_dict = {
|
|
||||||
'name': capfirst(model._meta.verbose_name_plural),
|
|
||||||
'object_name': model._meta.object_name,
|
|
||||||
'perms': perms,
|
|
||||||
}
|
|
||||||
if perms.get('change'):
|
|
||||||
try:
|
|
||||||
model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name)
|
|
||||||
except NoReverseMatch:
|
|
||||||
pass
|
|
||||||
if perms.get('add'):
|
|
||||||
try:
|
|
||||||
model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name)
|
|
||||||
except NoReverseMatch:
|
|
||||||
pass
|
|
||||||
if app_dict:
|
|
||||||
app_dict['models'].append(model_dict),
|
|
||||||
else:
|
|
||||||
# First time around, now that we know there's
|
|
||||||
# something to display, add in the necessary meta
|
|
||||||
# information.
|
|
||||||
app_dict = {
|
|
||||||
'name': app_name,
|
|
||||||
'app_label': app_label,
|
|
||||||
'app_url': '',
|
|
||||||
'has_module_perms': has_module_perms,
|
|
||||||
'models': [model_dict],
|
|
||||||
}
|
|
||||||
if not app_dict:
|
if not app_dict:
|
||||||
raise Http404('The requested admin page does not exist.')
|
raise Http404('The requested admin page does not exist.')
|
||||||
# Sort the models alphabetically within each app.
|
# Sort the models alphabetically within each app.
|
||||||
app_dict['models'].sort(key=lambda x: x['name'])
|
app_dict['models'].sort(key=lambda x: x['name'])
|
||||||
|
app_name = apps.get_app_config(app_label).verbose_name
|
||||||
context = dict(self.each_context(request),
|
context = dict(self.each_context(request),
|
||||||
title=_('%(app)s administration') % {'app': app_name},
|
title=_('%(app)s administration') % {'app': app_name},
|
||||||
app_list=[app_dict],
|
app_list=[app_dict],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user