1
1
from django .urls import URLResolver , include , path , re_path , register_converter
2
+ from django .urls .converters import get_converters
2
3
from django .urls .resolvers import RoutePattern
3
4
4
5
from rest_framework .settings import api_settings
5
6
6
7
7
- def _get_format_path_converter (suffix_kwarg , allowed ):
8
+ def _get_format_path_converter (allowed ):
8
9
if allowed :
9
10
if len (allowed ) == 1 :
10
11
allowed_pattern = allowed [0 ]
@@ -23,11 +24,14 @@ def to_python(self, value):
23
24
def to_url (self , value ):
24
25
return '.' + value + '/'
25
26
27
+ return FormatSuffixConverter
28
+
29
+
30
+ def _generate_converter_name (allowed ):
26
31
converter_name = 'drf_format_suffix'
27
32
if allowed :
28
33
converter_name += '_' + '_' .join (allowed )
29
-
30
- return converter_name , FormatSuffixConverter
34
+ return converter_name
31
35
32
36
33
37
def apply_suffix_patterns (urlpatterns , suffix_pattern , suffix_required , suffix_route = None ):
@@ -104,8 +108,10 @@ def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None):
104
108
else :
105
109
suffix_pattern = r'\.(?P<%s>[a-z0-9]+)/?$' % suffix_kwarg
106
110
107
- converter_name , suffix_converter = _get_format_path_converter (suffix_kwarg , allowed )
108
- register_converter (suffix_converter , converter_name )
111
+ converter_name = _generate_converter_name (allowed )
112
+ if converter_name not in get_converters ():
113
+ suffix_converter = _get_format_path_converter (allowed )
114
+ register_converter (suffix_converter , converter_name )
109
115
110
116
suffix_route = '<%s:%s>' % (converter_name , suffix_kwarg )
111
117
0 commit comments