Opened 12 years ago
Closed 11 years ago
#21132 closed Bug (fixed)
AdminSite cannot handle different namespace
| Reported by: | Markus Holtermann | Owned by: | Tim Graham |
|---|---|---|---|
| Component: | contrib.admin | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Assume you have a custom admin inheriting from django.contrib.admin.sites.AdminSite and you want to run it with its own namespace:
# testproject/urls.py
from django.conf.urls import patterns, include, url
from django.contrib.admin.sites import AdminSite
my_admin = AdminSite(name='name', app_name='app_name')
urlpatterns = patterns('',
url(r'^admin/', include(my_admin.urls)),
)
This is going to fail with the following error:
Traceback (most recent call last):
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/core/urlresolvers.py", line 482, in reverse
extra, resolver = resolver.namespace_dict[ns]
KeyError: 'admin'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/contrib/admin/sites.py", line 219, in wrapper
return self.admin_view(view, cacheable)(*args, **kwargs)
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/views/decorators/cache.py", line 89, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/contrib/admin/sites.py", line 198, in inner
current_app=self.name):
File "/home/markus/.venvs/django-namespace-test/lib/python3.3/site-packages/django/core/urlresolvers.py", line 492, in reverse
key)
django.core.urlresolvers.NoReverseMatch: 'admin' is not a registered namespace
Change History (6)
follow-up: 3 comment:1 by , 12 years ago
| Component: | Uncategorized → contrib.admin |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
| Type: | Uncategorized → Bug |
| Version: | 1.5 → master |
comment:2 by , 12 years ago
| Has patch: | set |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
This ticket is quite big (at least for me). This PR is the first step to fix this issue. https://github.com/django/django/pull/1845
There are more to be done. You can check by:
$ grep -R "admin:" *
comment:3 by , 12 years ago
Replying to apollo13:
The whole admin is currently built on the idea that the app is named admin, I think we should just deprecate the app_name argument.
I disagree. I think we should fix it. Hardcoded admin strings all around are, IMO, a very bad idea.
On the other hand, I'm not really an expert in app and URL namespacing so take my comment with a grain of salt.
PS: this topic is currently discussed in the mailing list https://groups.google.com/forum/#!topic/django-developers/pc5A3qrvITQ
comment:4 by , 12 years ago
comment:5 by , 11 years ago
| Owner: | changed from to |
|---|
PR to remove the app_name argument. There seems no need for a deprecation since the functionality doesn't work and isn't documented.
comment:6 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
The whole admin is currently built on the idea that the app is named admin, I think we should just deprecate the app_name argument.