summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2011-12-19 14:59:14 +0000
committerRamiro Morales <cramm0@gmail.com>2011-12-19 14:59:14 +0000
commit554f0601b59309df8c9da2f14c56f9ea97aabc91 (patch)
treec7073dcaabe638deff65a211d0af765f058eeb06 /django
parent259ebcdeeac9929b173cae8bbc5f7dd4ee102cb8 (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.py26
-rw-r--r--django/contrib/admin/templates/admin/index.html6
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>&nbsp;</td>
{% endif %}
- {% if model.perms.change %}
+ {% if model.admin_url %}
<td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
{% else %}
<td>&nbsp;</td>