Code

Ticket #1390: updated_app_name_link2.diff

File updated_app_name_link2.diff, 8.7 KB (added by juliae, 6 years ago)
Line 
1Index: django/contrib/admin/media/css/global.css
2===================================================================
3--- django/contrib/admin/media/css/global.css   (revision 8453)
4+++ django/contrib/admin/media/css/global.css   (working copy)
5@@ -4,6 +4,7 @@
6 a:link, a:visited { color: #5b80b2; text-decoration:none; }
7 a:hover { color: #036; }
8 a img { border:none; }
9+a.section:link, a.section:visited { color: white; text-decoration:none; }
10 
11 /* GLOBAL DEFAULTS */
12 p, ol, ul, dl { margin:.2em 0 .8em 0; }
13Index: django/contrib/admin/options.py
14===================================================================
15--- django/contrib/admin/options.py     (revision 8453)
16+++ django/contrib/admin/options.py     (working copy)
17@@ -519,6 +519,7 @@
18             'inline_admin_formsets': inline_admin_formsets,
19             'errors': helpers.AdminErrorList(form, formsets),
20             'root_path': self.admin_site.root_path,
21+            'app_label': app_label,
22         }
23         context.update(extra_context or {})
24         return self.render_change_form(request, context, add=True)
25@@ -597,6 +598,7 @@
26             'inline_admin_formsets': inline_admin_formsets,
27             'errors': helpers.AdminErrorList(form, formsets),
28             'root_path': self.admin_site.root_path,
29+            'app_label': app_label,
30         }
31         context.update(extra_context or {})
32         return self.render_change_form(request, context, change=True, obj=obj)
33@@ -628,6 +630,7 @@
34             'cl': cl,
35             'has_add_permission': self.has_add_permission(request),
36             'root_path': self.admin_site.root_path,
37+            'app_label': app_label,
38         }
39         context.update(extra_context or {})
40         return render_to_response(self.change_list_template or [
41@@ -682,6 +685,7 @@
42             "perms_lacking": perms_needed,
43             "opts": opts,
44             "root_path": self.admin_site.root_path,
45+            "app_label": app_label,
46         }
47         context.update(extra_context or {})
48         return render_to_response(self.delete_confirmation_template or [
49Index: django/contrib/admin/templates/admin/change_list.html
50===================================================================
51--- django/contrib/admin/templates/admin/change_list.html       (revision 8453)
52+++ django/contrib/admin/templates/admin/change_list.html       (working copy)
53@@ -5,7 +5,7 @@
54 
55 {% block bodyclass %}change-list{% endblock %}
56 
57-{% if not is_popup %}{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> &rsaquo; {{ cl.opts.verbose_name_plural|capfirst|escape }}</div>{% endblock %}{% endif %}
58+{% if not is_popup %}{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> &rsaquo; <a href="../">{{ app_label|capfirst|escape }}</a> &rsaquo; {{ cl.opts.verbose_name_plural|capfirst|escape }}</div>{% endblock %}{% endif %}
59 
60 {% block coltype %}flex{% endblock %}
61 
62Index: django/contrib/admin/templates/admin/index.html
63===================================================================
64--- django/contrib/admin/templates/admin/index.html     (revision 8453)
65+++ django/contrib/admin/templates/admin/index.html     (working copy)
66@@ -16,7 +16,7 @@
67     {% for app in app_list %}
68         <div class="module">
69         <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
70-        <caption>{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</caption>
71+        <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
72         {% for model in app.models %}
73             <tr>
74             {% if model.perms.change %}
75Index: django/contrib/admin/templates/admin/app_index.html
76===================================================================
77--- django/contrib/admin/templates/admin/app_index.html (revision 0)
78+++ django/contrib/admin/templates/admin/app_index.html (revision 0)
79@@ -0,0 +1,15 @@
80+{% extends "admin/index.html" %}
81+{% load i18n %}
82+
83+{% if not is_popup %}
84+
85+{% block breadcrumbs %}
86+<div class="breadcrumbs"><a href="../">
87+{% trans "Home" %}</a> &rsaquo;
88+{% for app in app_list %}
89+{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}
90+{% endfor %}</div>{% endblock %}
91+
92+{% endif %}
93+
94+{% block sidebar %}{% endblock %}
95\ No newline at end of file
96Index: django/contrib/admin/templates/admin/change_form.html
97===================================================================
98--- django/contrib/admin/templates/admin/change_form.html       (revision 8453)
99+++ django/contrib/admin/templates/admin/change_form.html       (working copy)
100@@ -15,6 +15,7 @@
101 {% block breadcrumbs %}{% if not is_popup %}
102 <div class="breadcrumbs">
103      <a href="../../../">{% trans "Home" %}</a> &rsaquo;
104+     <a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
105      <a href="../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
106      {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
107 </div>
108Index: django/contrib/admin/templates/admin/delete_confirmation.html
109===================================================================
110--- django/contrib/admin/templates/admin/delete_confirmation.html       (revision 8453)
111+++ django/contrib/admin/templates/admin/delete_confirmation.html       (working copy)
112@@ -4,6 +4,7 @@
113 {% block breadcrumbs %}
114 <div class="breadcrumbs">
115      <a href="../../../../">{% trans "Home" %}</a> &rsaquo;
116+     <a href="../../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
117      <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
118      <a href="../">{{ object|escape|truncatewords:"18" }}</a> &rsaquo;
119      {% trans 'Delete' %}
120Index: django/contrib/admin/sites.py
121===================================================================
122--- django/contrib/admin/sites.py       (revision 8453)
123+++ django/contrib/admin/sites.py       (working copy)
124@@ -170,6 +170,8 @@
125         else:
126             if '/' in url:
127                 return self.model_page(request, *url.split('/', 2))
128+            else:
129+                   return self.app_index(request,url)
130 
131         raise http.Http404('The requested admin page does not exist.')
132 
133@@ -314,6 +316,7 @@
134                     else:
135                         app_dict[app_label] = {
136                             'name': app_label.title(),
137+                            'app_url': app_label,
138                             'has_module_perms': has_module_perms,
139                             'models': [model_dict],
140                         }
141@@ -359,7 +362,42 @@
142         return render_to_response(self.login_template or 'admin/login.html', context,
143             context_instance=template.RequestContext(request)
144         )
145+   
146+    def app_index(self, request, app_label):
147 
148+        user = request.user
149+        has_module_perms = user.has_module_perms(app_label)
150+        app_dict = {}
151+        for model, model_admin in self._registry.items():
152+            if app_label == model._meta.app_label:
153+               if has_module_perms:
154+                  perms = {
155+                        'add': user.has_perm("%s.%s" % (app_label, model._meta.get_add_permission())),
156+                        'change': user.has_perm("%s.%s" % (app_label, model._meta.get_change_permission())),
157+                        'delete': user.has_perm("%s.%s" % (app_label, model._meta.get_delete_permission())), }
158+                  # Check whether user has any perm for this module.
159+                  # If so, add the module to the model_list.
160+                  if True in perms.values():
161+                        model_dict = {
162+                                 'name': capfirst(model._meta.verbose_name_plural),
163+                                 'admin_url': '%s/' % model.__name__.lower(),
164+                              'perms': perms,}
165+                  if app_dict:
166+                     app_dict['models'].append(model_dict),
167+                  else:
168+                       app_dict = {
169+                                      'name': app_label.title(),
170+                                   'app_url': '',
171+                                      'has_module_perms': has_module_perms,
172+                                   'models': [model_dict],}
173+                  if not app_dict:
174+                        raise http.Http404('The requested admin page does not exist.') 
175+        # Sort the models alphabetically within each app.
176+        app_dict['models'].sort(lambda x, y: cmp(x['name'], y['name']))
177+        return render_to_response('admin/app_index.html', {
178+                  'title': _('%s administration' % capfirst(app_label)),
179+               'app_list': [app_dict,],}
180+               , context_instance=template.RequestContext(request))
181 
182 # This global object represents the default admin site, for the common case.
183 # You can instantiate AdminSite in your own code to create a custom admin site.