diff options
| author | Brian Rosner <brosner@gmail.com> | 2008-08-23 04:00:15 +0000 |
|---|---|---|
| committer | Brian Rosner <brosner@gmail.com> | 2008-08-23 04:00:15 +0000 |
| commit | 77c78201b802c407361641a76208fc11af16b68d (patch) | |
| tree | 4c80460c385438058b1f787aeb8bd43b10c65684 | |
| parent | ab26efc95286fa3e7e52f5f9ec232055bcd2cbb7 (diff) | |
Fixed #1390 -- Added an app index in the admin interface. Thanks juliae and ext for their work on patches.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8474 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/contrib/admin/media/css/global.css | 1 | ||||
| -rw-r--r-- | django/contrib/admin/options.py | 4 | ||||
| -rw-r--r-- | django/contrib/admin/sites.py | 42 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/app_index.html | 15 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/change_form.html | 1 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/change_list.html | 2 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/delete_confirmation.html | 1 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/index.html | 2 |
9 files changed, 66 insertions, 3 deletions
@@ -207,6 +207,7 @@ answer newbie questions, and generally made Django that much better: Nis Jørgensen <nis@superlativ.dk> Michael Josephson <http://www.sdjournal.com/> jpellerin@gmail.com + juliae junzhang.jn@gmail.com Antti Kaihola <http://akaihola.blogspot.com/> Bahadır Kandemir <bahadir@pardus.org.tr> diff --git a/django/contrib/admin/media/css/global.css b/django/contrib/admin/media/css/global.css index a4e5fd3d7f..00a8166c7c 100644 --- a/django/contrib/admin/media/css/global.css +++ b/django/contrib/admin/media/css/global.css @@ -4,6 +4,7 @@ body { margin:0; padding:0; font-size:12px; font-family:"Lucida Grande","DejaVu a:link, a:visited { color: #5b80b2; text-decoration:none; } a:hover { color: #036; } a img { border:none; } +a.section:link, a.section:visited { color: white; text-decoration:none; } /* GLOBAL DEFAULTS */ p, ol, ul, dl { margin:.2em 0 .8em 0; } diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 69fdb4f08e..63acbb4b1b 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -522,6 +522,7 @@ class ModelAdmin(BaseModelAdmin): 'inline_admin_formsets': inline_admin_formsets, 'errors': helpers.AdminErrorList(form, formsets), 'root_path': self.admin_site.root_path, + 'app_label': app_label, } context.update(extra_context or {}) return self.render_change_form(request, context, add=True) @@ -600,6 +601,7 @@ class ModelAdmin(BaseModelAdmin): 'inline_admin_formsets': inline_admin_formsets, 'errors': helpers.AdminErrorList(form, formsets), 'root_path': self.admin_site.root_path, + 'app_label': app_label, } context.update(extra_context or {}) return self.render_change_form(request, context, change=True, obj=obj) @@ -631,6 +633,7 @@ class ModelAdmin(BaseModelAdmin): 'cl': cl, 'has_add_permission': self.has_add_permission(request), 'root_path': self.admin_site.root_path, + 'app_label': app_label, } context.update(extra_context or {}) return render_to_response(self.change_list_template or [ @@ -685,6 +688,7 @@ class ModelAdmin(BaseModelAdmin): "perms_lacking": perms_needed, "opts": opts, "root_path": self.admin_site.root_path, + "app_label": app_label, } context.update(extra_context or {}) return render_to_response(self.delete_confirmation_template or [ diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py index 9d0c65d589..0407d3d47e 100644 --- a/django/contrib/admin/sites.py +++ b/django/contrib/admin/sites.py @@ -170,6 +170,8 @@ class AdminSite(object): else: if '/' in url: return self.model_page(request, *url.split('/', 2)) + else: + return self.app_index(request, url) raise http.Http404('The requested admin page does not exist.') @@ -315,6 +317,7 @@ class AdminSite(object): else: app_dict[app_label] = { 'name': app_label.title(), + 'app_url': app_label, 'has_module_perms': has_module_perms, 'models': [model_dict], } @@ -360,7 +363,44 @@ class AdminSite(object): return render_to_response(self.login_template or 'admin/login.html', context, context_instance=template.RequestContext(request) ) - + + def app_index(self, request, app_label): + user = request.user + has_module_perms = user.has_module_perms(app_label) + app_dict = {} + for model, model_admin in self._registry.items(): + if app_label == model._meta.app_label: + if has_module_perms: + perms = { + 'add': user.has_perm("%s.%s" % (app_label, model._meta.get_add_permission())), + 'change': user.has_perm("%s.%s" % (app_label, model._meta.get_change_permission())), + 'delete': user.has_perm("%s.%s" % (app_label, model._meta.get_delete_permission())), + } + # Check whether user has any perm for this module. + # If so, add the module to the model_list. + if True in perms.values(): + model_dict = { + 'name': capfirst(model._meta.verbose_name_plural), + 'admin_url': '%s/' % model.__name__.lower(), + 'perms': perms, + } + if app_dict: + app_dict['models'].append(model_dict), + else: + app_dict = { + 'name': app_label.title(), + 'app_url': '', + 'has_module_perms': has_module_perms, + 'models': [model_dict], + } + if not app_dict: + raise http.Http404('The requested admin page does not exist.') + # Sort the models alphabetically within each app. + app_dict['models'].sort(lambda x, y: cmp(x['name'], y['name'])) + return render_to_response('admin/app_index.html', { + 'title': _('%s administration' % capfirst(app_label)), + 'app_list': [app_dict] + }, context_instance=template.RequestContext(request)) # This global object represents the default admin site, for the common case. # You can instantiate AdminSite in your own code to create a custom admin site. diff --git a/django/contrib/admin/templates/admin/app_index.html b/django/contrib/admin/templates/admin/app_index.html new file mode 100644 index 0000000000..120433d708 --- /dev/null +++ b/django/contrib/admin/templates/admin/app_index.html @@ -0,0 +1,15 @@ +{% extends "admin/index.html" %} +{% load i18n %} + +{% if not is_popup %} + +{% block breadcrumbs %} +<div class="breadcrumbs"><a href="../"> +{% trans "Home" %}</a> › +{% for app in app_list %} +{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %} +{% endfor %}</div>{% endblock %} + +{% endif %} + +{% block sidebar %}{% endblock %}
\ No newline at end of file diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index f5809fb143..f367973820 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -15,6 +15,7 @@ {% block breadcrumbs %}{% if not is_popup %} <div class="breadcrumbs"> <a href="../../../">{% trans "Home" %}</a> › + <a href="../../">{{ app_label|capfirst|escape }}</a> › <a href="../">{{ opts.verbose_name_plural|capfirst }}</a> › {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %} </div> diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index 24286a51a7..b66f67edf6 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -5,7 +5,7 @@ {% block bodyclass %}change-list{% endblock %} -{% if not is_popup %}{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> › {{ cl.opts.verbose_name_plural|capfirst|escape }}</div>{% endblock %}{% endif %} +{% if not is_popup %}{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> › <a href="../">{{ app_label|capfirst|escape }}</a> › {{ cl.opts.verbose_name_plural|capfirst|escape }}</div>{% endblock %}{% endif %} {% block coltype %}flex{% endblock %} diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index 386e134b96..2a6c4b4ad5 100644 --- a/django/contrib/admin/templates/admin/delete_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_confirmation.html @@ -4,6 +4,7 @@ {% block breadcrumbs %} <div class="breadcrumbs"> <a href="../../../../">{% trans "Home" %}</a> › + <a href="../../../">{{ app_label|capfirst|escape }}</a> › <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> › <a href="../">{{ object|escape|truncatewords:"18" }}</a> › {% trans 'Delete' %} diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index 074be03208..ba0c381fad 100644 --- a/django/contrib/admin/templates/admin/index.html +++ b/django/contrib/admin/templates/admin/index.html @@ -16,7 +16,7 @@ {% for app in app_list %} <div class="module"> <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}"> - <caption>{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</caption> + <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption> {% for model in app.models %} <tr> {% if model.perms.change %} |
