Code

Ticket #2835: 3874-process-remove-kwargs-in-urlconf.diff

File 3874-process-remove-kwargs-in-urlconf.diff, 1.8 KB (added by [530], 8 years ago)
Line 
1Index: django/core/urlresolvers.py
2===================================================================
3--- django/core/urlresolvers.py (revision 3874)
4+++ django/core/urlresolvers.py (working copy)
5@@ -160,8 +160,31 @@
6                     tried.extend([(pattern.regex.pattern + '   ' + t) for t in e.args[0]['tried']])
7                 else:
8                     if sub_match:
9+
10+                        process_kwargs = []
11+                        if self.default_kwargs.get('process_kwargs'):
12+                            process_kwargs = self.default_kwargs['process_kwargs']
13+                            del self.default_kwargs['process_kwargs']
14+
15+                        remove_kwargs = []
16+                        if self.default_kwargs.get('remove_kwargs'):
17+                            remove_kwargs = self.default_kwargs['remove_kwargs']
18+                            del self.default_kwargs['remove_kwargs']
19+                         
20                         sub_match_dict = dict(self.default_kwargs, **sub_match[2])
21-                        return sub_match[0], sub_match[1], dict(match.groupdict(), **sub_match_dict)
22+                        all_args = [sub_match[0], sub_match[1], dict(match.groupdict(), **sub_match_dict)]
23+
24+                        for key in process_kwargs:
25+                            if all_args[2].has_key(key):
26+                                to_call=all_args[2][key]
27+                                all_args[2] = dict(all_args[2], **to_call(all_args) )                       
28+
29+                        for key in remove_kwargs:
30+                            if all_args[2].has_key(key):
31+                                del all_args[2][key]
32+   
33+                        return all_args                       
34+
35                     tried.append(pattern.regex.pattern)
36             raise Resolver404, {'tried': tried, 'path': new_path}
37