From 554f0601b59309df8c9da2f14c56f9ea97aabc91 Mon Sep 17 00:00:00 2001 From: Ramiro Morales Date: Mon, 19 Dec 2011 14:59:14 +0000 Subject: 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 --- django/contrib/admin/sites.py | 26 ++++++++++++++++++++----- django/contrib/admin/templates/admin/index.html | 6 +++--- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'django') 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 @@ {% blocktrans with name=app.name %}{{ name }}{% endblocktrans %} {% for model in app.models %} - {% if model.perms.change %} + {% if model.admin_url %} {{ model.name }} {% else %} {{ model.name }} {% endif %} - {% if model.perms.add %} + {% if model.add_url %} {% trans 'Add' %} {% else %}   {% endif %} - {% if model.perms.change %} + {% if model.admin_url %} {% trans 'Change' %} {% else %}   -- cgit v1.3