@@ -65,6 +65,19 @@ def get_object(self, *args, **kwargs):
65
65
return self .queryset [index ]
66
66
67
67
68
+ class RegexUrlPathViewSet (viewsets .ViewSet ):
69
+ @list_route (url_path = 'list/(?P<kwarg>[0-9]{4})' )
70
+ def regex_url_path_list (self , request , * args , ** kwargs ):
71
+ kwarg = self .kwargs .get ('kwarg' , '' )
72
+ return Response ({'kwarg' : kwarg })
73
+
74
+ @detail_route (url_path = 'detail/(?P<kwarg>[0-9]{4})' )
75
+ def regex_url_path_detail (self , request , * args , ** kwargs ):
76
+ pk = self .kwargs .get ('pk' , '' )
77
+ kwarg = self .kwargs .get ('kwarg' , '' )
78
+ return Response ({'pk' : pk , 'kwarg' : kwarg })
79
+
80
+
68
81
notes_router = SimpleRouter ()
69
82
notes_router .register (r'notes' , NoteViewSet )
70
83
@@ -80,13 +93,17 @@ def get_object(self, *args, **kwargs):
80
93
url (r'^' , include (empty_prefix_router .urls )),
81
94
]
82
95
96
+ regex_url_path_router = SimpleRouter ()
97
+ regex_url_path_router .register (r'' , RegexUrlPathViewSet , base_name = 'regex' )
98
+
83
99
urlpatterns = [
84
100
url (r'^non-namespaced/' , include (namespaced_router .urls )),
85
101
url (r'^namespaced/' , include (namespaced_router .urls , namespace = 'example' , app_name = 'example' )),
86
102
url (r'^example/' , include (notes_router .urls )),
87
103
url (r'^example2/' , include (kwarged_notes_router .urls )),
88
104
89
105
url (r'^empty-prefix/' , include (empty_prefix_urls )),
106
+ url (r'^regex/' , include (regex_url_path_router .urls ))
90
107
]
91
108
92
109
@@ -402,3 +419,19 @@ def test_empty_prefix_detail(self):
402
419
response = self .client .get ('/empty-prefix/1/' )
403
420
assert response .status_code == 200
404
421
assert json .loads (response .content .decode ('utf-8' )) == {'uuid' : '111' , 'text' : 'First' }
422
+
423
+
424
+ @override_settings (ROOT_URLCONF = 'tests.test_routers' )
425
+ class TestRegexUrlPath (TestCase ):
426
+ def test_regex_url_path_list (self ):
427
+ kwarg = '1234'
428
+ response = self .client .get ('/regex/list/{}/' .format (kwarg ))
429
+ assert response .status_code == 200
430
+ assert json .loads (response .content .decode ('utf-8' )) == {'kwarg' : kwarg }
431
+
432
+ def test_regex_url_path_detail (self ):
433
+ pk = '1'
434
+ kwarg = '1234'
435
+ response = self .client .get ('/regex/{}/detail/{}/' .format (pk , kwarg ))
436
+ assert response .status_code == 200
437
+ assert json .loads (response .content .decode ('utf-8' )) == {'pk' : pk , 'kwarg' : kwarg }
0 commit comments