aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/urlpatterns.py
diff options
context:
space:
mode:
authorTom Christie2013-01-19 16:56:48 +0000
committerTom Christie2013-01-19 16:56:48 +0000
commit2c05faa52ae65f96fdcc73efceb6c44511698261 (patch)
treec0cc726d63e9c9ae560e540ddd05d7410e960041 /rest_framework/urlpatterns.py
parent37d49429ca34eed86ea142e5dceea4cd9536df2d (diff)
downloaddjango-rest-framework-2c05faa52ae65f96fdcc73efceb6c44511698261.tar.bz2
`format_suffix_patterns` now support `include`-style nested URL patterns. Fixes #593
Diffstat (limited to 'rest_framework/urlpatterns.py')
-rw-r--r--rest_framework/urlpatterns.py44
1 files changed, 31 insertions, 13 deletions
diff --git a/rest_framework/urlpatterns.py b/rest_framework/urlpatterns.py
index 143928c9..0aaad334 100644
--- a/rest_framework/urlpatterns.py
+++ b/rest_framework/urlpatterns.py
@@ -1,5 +1,34 @@
-from rest_framework.compat import url
+from rest_framework.compat import url, include
from rest_framework.settings import api_settings
+from django.core.urlresolvers import RegexURLResolver
+
+
+def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required):
+ ret = []
+ for urlpattern in urlpatterns:
+ if not isinstance(urlpattern, RegexURLResolver):
+ # Regular URL pattern
+
+ # Form our complementing '.format' urlpattern
+ regex = urlpattern.regex.pattern.rstrip('$') + suffix_pattern
+ view = urlpattern._callback or urlpattern._callback_str
+ kwargs = urlpattern.default_args
+ name = urlpattern.name
+ # Add in both the existing and the new urlpattern
+ if not suffix_required:
+ ret.append(urlpattern)
+ ret.append(url(regex, view, kwargs, name))
+ else:
+ # Set of included URL patterns
+ print(type(urlpattern))
+ regex = urlpattern.regex.pattern
+ namespace = urlpattern.namespace
+ app_name = urlpattern.app_name
+ patterns = apply_suffix_patterns(urlpattern.url_patterns,
+ suffix_pattern,
+ suffix_required)
+ ret.append(url(regex, include(patterns, namespace, app_name)))
+ return ret
def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None):
@@ -28,15 +57,4 @@ def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None):
else:
suffix_pattern = r'\.(?P<%s>[a-z]+)$' % suffix_kwarg
- ret = []
- for urlpattern in urlpatterns:
- # Form our complementing '.format' urlpattern
- regex = urlpattern.regex.pattern.rstrip('$') + suffix_pattern
- view = urlpattern._callback or urlpattern._callback_str
- kwargs = urlpattern.default_args
- name = urlpattern.name
- # Add in both the existing and the new urlpattern
- if not suffix_required:
- ret.append(urlpattern)
- ret.append(url(regex, view, kwargs, name))
- return ret
+ return apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required)