Add ability to have named urls.

This commit is contained in:
Chris Jones
2012-01-16 16:49:56 -08:00
parent 53046715d9
commit 799f9ba7fd
4 changed files with 46 additions and 12 deletions

View File

@@ -8,8 +8,9 @@ __version__ = '.'.join([str(x) for x in VERSION])
class DjrillAdminSite(AdminSite):
index_template = "djrill/index.html"
custom_views = []
custom_urls = []
def register_view(self, path, view, name=None):
def register_view(self, path, view, name, display_name=None):
"""Add a custom admin view.
* `path` is the path in the admin where the view will live, e.g.
@@ -18,25 +19,33 @@ class DjrillAdminSite(AdminSite):
* `name` is an optional pretty name for the list of custom views. If
empty, we'll guess based on view.__name__.
"""
self.custom_views.append((path, view, name))
self.custom_views.append((path, view, name, display_name))
def register_url(self, path, view, name):
self.custom_urls.append((path, view, name))
def get_urls(self):
"""Add our custom views to the admin urlconf."""
urls = super(DjrillAdminSite, self).get_urls()
from django.conf.urls.defaults import patterns, url
for path, view, name in self.custom_views:
for path, view, name, display_name in self.custom_views:
urls += patterns('',
url(r'^%s$' % path, self.admin_view(view)),
url(r'^%s$' % path, self.admin_view(view), name=name),
)
for path, view, name in self.custom_urls:
urls += patterns('',
url(r'^%s$' % path, self.admin_view(view), name=name),
)
return urls
def index(self, request, extra_context=None):
"""Make sure our list of custom views is on the index page."""
if not extra_context:
extra_context = {}
custom_list = [(path, name if name else
capfirst(view.__name__)) for path, view, name in
self.custom_views]
custom_list = [(path, display_name if display_name else
capfirst(view.__name__)) for path, view, name, display_name in
self.custom_views]
# Sort views alphabetically.
custom_list.sort(key=lambda x: x[1])
extra_context.update({