View difference between Paste ID: 7KfALc0j and
SHOW:
|
|
- or go back to the newest paste.
| 1 | - | |
| 1 | + | from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver |
| 2 | ||
| 3 | __all__ = ('resolve_to_name',)
| |
| 4 | ||
| 5 | def _pattern_resolve_to_name(self, path): | |
| 6 | match = self.regex.search(path) | |
| 7 | if match: | |
| 8 | name = "" | |
| 9 | if self.name: | |
| 10 | name = self.name | |
| 11 | elif hasattr(self, '_callback_str'): | |
| 12 | name = self._callback_str | |
| 13 | else: | |
| 14 | name = "%s.%s" % (self.callback.__module__, self.callback.func_name) | |
| 15 | return name | |
| 16 | ||
| 17 | def _resolver_resolve_to_name(self, path): | |
| 18 | tried = [] | |
| 19 | match = self.regex.search(path) | |
| 20 | if match: | |
| 21 | new_path = path[match.end():] | |
| 22 | for pattern in self.url_patterns: | |
| 23 | try: | |
| 24 | name = _pattern_resolve_to_name(pattern,new_path) | |
| 25 | except Resolver404, e: | |
| 26 | tried.extend([(pattern.regex.pattern + ' ' + t) for t in e.args[0]['tried']]) | |
| 27 | else: | |
| 28 | if name: | |
| 29 | return name | |
| 30 | tried.append(pattern.regex.pattern) | |
| 31 | raise Resolver404, {'tried': tried, 'path': new_path}
| |
| 32 | ||
| 33 | ||
| 34 | def resolve_to_name(path, urlconf=None): | |
| 35 | r = get_resolver(urlconf) | |
| 36 | if isinstance(r,RegexURLPattern): | |
| 37 | return _pattern_resolve_to_name(r,path) | |
| 38 | else: | |
| 39 | return _resolver_resolve_to_name(r,path) |