diff options
| author | Ramiro Morales <cramm0@gmail.com> | 2011-12-19 14:59:14 +0000 |
|---|---|---|
| committer | Ramiro Morales <cramm0@gmail.com> | 2011-12-19 14:59:14 +0000 |
| commit | 554f0601b59309df8c9da2f14c56f9ea97aabc91 (patch) | |
| tree | c7073dcaabe638deff65a211d0af765f058eeb06 /django | |
| parent | 259ebcdeeac9929b173cae8bbc5f7dd4ee102cb8 (diff) | |
Stopped unconditionally reversing admin model add/change URLs.
Starting with [16857] this could cause HTTP 500 errors when
`ModelAdmin.get_urls()` has been customized to the point it doesn't
provide these standard URLs.
Fixes #17333. Refs #15294.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17237 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/sites.py | 26 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/index.html | 6 |
2 files changed, 24 insertions, 8 deletions
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py index 3a5c12b70a..83a08699c2 100644 --- a/django/contrib/admin/sites.py +++ b/django/contrib/admin/sites.py @@ -7,7 +7,7 @@ from django.contrib.contenttypes import views as contenttype_views from django.views.decorators.csrf import csrf_protect from django.db.models.base import ModelBase from django.core.exceptions import ImproperlyConfigured -from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse, NoReverseMatch from django.template.response import TemplateResponse from django.utils.safestring import mark_safe from django.utils.text import capfirst @@ -342,10 +342,18 @@ class AdminSite(object): info = (app_label, model._meta.module_name) model_dict = { 'name': capfirst(model._meta.verbose_name_plural), - 'admin_url': reverse('admin:%s_%s_changelist' % info, current_app=self.name), - 'add_url': reverse('admin:%s_%s_add' % info, current_app=self.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: @@ -388,10 +396,18 @@ class AdminSite(object): info = (app_label, model._meta.module_name) model_dict = { 'name': capfirst(model._meta.verbose_name_plural), - 'admin_url': reverse('admin:%s_%s_changelist' % info, current_app=self.name), - 'add_url': reverse('admin:%s_%s_add' % info, current_app=self.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_dict: app_dict['models'].append(model_dict), else: diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index b301edc5ba..a8ced39121 100644 --- a/django/contrib/admin/templates/admin/index.html +++ b/django/contrib/admin/templates/admin/index.html @@ -19,19 +19,19 @@ <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with name=app.name %}{{ name }}{% endblocktrans %}</a></caption> {% for model in app.models %} <tr> - {% if model.perms.change %} + {% if model.admin_url %} <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th> {% else %} <th scope="row">{{ model.name }}</th> {% endif %} - {% if model.perms.add %} + {% if model.add_url %} <td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td> {% else %} <td> </td> {% endif %} - {% if model.perms.change %} + {% if model.admin_url %} <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td> {% else %} <td> </td> |
