aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/routers.py
diff options
context:
space:
mode:
authorTom Christie2013-04-04 21:42:26 +0100
committerTom Christie2013-04-04 21:42:26 +0100
commitf68721ade8d66806296323116ff9a61773ad2be1 (patch)
treed9f44f935ad338f7accb9500383c15bf30bc3621 /rest_framework/routers.py
parent9e24db022cd8da1a588dd43e6239e07798881c02 (diff)
downloaddjango-rest-framework-f68721ade8d66806296323116ff9a61773ad2be1.tar.bz2
Factor view names/descriptions out of View class
Diffstat (limited to 'rest_framework/routers.py')
-rw-r--r--rest_framework/routers.py34
1 files changed, 21 insertions, 13 deletions
diff --git a/rest_framework/routers.py b/rest_framework/routers.py
index 283add8d..c37909ff 100644
--- a/rest_framework/routers.py
+++ b/rest_framework/routers.py
@@ -14,23 +14,31 @@ class BaseRouter(object):
@property
def urlpatterns(self):
if not hasattr(self, '_urlpatterns'):
- print self.get_urlpatterns()
self._urlpatterns = patterns('', *self.get_urlpatterns())
return self._urlpatterns
class DefaultRouter(BaseRouter):
route_list = [
- (r'$', {'get': 'list', 'post': 'create'}, '%s-list'),
- (r'(?P<pk>[^/]+)/$', {'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}, '%s-detail'),
+ (r'$', {'get': 'list', 'post': 'create'}, 'list'),
+ (r'(?P<pk>[^/]+)/$', {'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}, 'detail'),
]
- extra_routes = (r'(?P<pk>[^/]+)/%s/$', '%s-%s')
+ extra_routes = r'(?P<pk>[^/]+)/%s/$'
+ name_format = '%s-%s'
def get_urlpatterns(self):
ret = []
for prefix, viewset, base_name in self.registry:
+ # Bind regular views
+ if not getattr(viewset, '_is_viewset', False):
+ regex = prefix
+ view = viewset
+ name = base_name
+ ret.append(url(regex, view, name=name))
+ continue
+
# Bind standard CRUD routes
- for suffix, action_mapping, name_format in self.route_list:
+ for suffix, action_mapping, action_name in self.route_list:
# Only actions which actually exist on the viewset will be bound
bound_actions = {}
@@ -40,25 +48,25 @@ class DefaultRouter(BaseRouter):
# Build the url pattern
regex = prefix + suffix
- view = viewset.as_view(bound_actions)
- name = name_format % base_name
+ view = viewset.as_view(bound_actions, name_suffix=action_name)
+ name = self.name_format % (base_name, action_name)
ret.append(url(regex, view, name=name))
# Bind any extra `@action` or `@link` routes
- for attr in dir(viewset):
- func = getattr(viewset, attr)
+ for action_name in dir(viewset):
+ func = getattr(viewset, action_name)
http_method = getattr(func, 'bind_to_method', None)
# Skip if this is not an @action or @link method
if not http_method:
continue
- regex_format, name_format = self.extra_routes
+ suffix = self.extra_routes % action_name
# Build the url pattern
- regex = regex_format % attr
- view = viewset.as_view({http_method: attr}, **func.kwargs)
- name = name_format % (base_name, attr)
+ regex = prefix + suffix
+ view = viewset.as_view({http_method: action_name}, **func.kwargs)
+ name = self.name_format % (base_name, action_name)
ret.append(url(regex, view, name=name))
# Return a list of url patterns