diff options
| author | Tom Christie | 2013-04-04 21:42:26 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-04-04 21:42:26 +0100 | 
| commit | f68721ade8d66806296323116ff9a61773ad2be1 (patch) | |
| tree | d9f44f935ad338f7accb9500383c15bf30bc3621 /rest_framework/routers.py | |
| parent | 9e24db022cd8da1a588dd43e6239e07798881c02 (diff) | |
| download | django-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.py | 34 | 
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 | 
