diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index 99fecf5f98..1bd8b65111 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -2,7 +2,6 @@ import copy import re from django.core.urlresolvers import reverse, NoReverseMatch -from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver from django.template import TemplateSyntaxError, Library, \ VariableDoesNotExist, Node, Variable from django.utils.text import unescape_string_literal @@ -11,6 +10,7 @@ from django.utils.translation import ugettext as _ from navigation.api import object_navigation, multi_object_navigation, \ menu_links as menu_navigation from navigation.forms import MultiItemForm +from navigation.utils import resolve_to_name register = Library() @@ -71,54 +71,6 @@ def main_navigation(parser, token): return NavigationNode(navigation=menu_navigation) -#http://www.djangosnippets.org/snippets/1378/ -__all__ = ('resolve_to_name',) - - -def _pattern_resolve_to_name(self, path): - match = self.regex.search(path) - if match: - name = "" - if self.name: - name = self.name - elif hasattr(self, '_callback_str'): - name = self._callback_str - else: - name = "%s.%s" % (self.callback.__module__, self.callback.func_name) - return name - - -def _resolver_resolve_to_name(self, path): - tried = [] - match = self.regex.search(path) - if match: - new_path = path[match.end():] - for pattern in self.url_patterns: - try: - name = pattern.resolve_to_name(new_path) - except Resolver404, e: - tried.extend([(pattern.regex.pattern + ' ' + t) for t in e.args[0]['tried']]) - else: - if name: - return name - tried.append(pattern.regex.pattern) - raise Resolver404, {'tried': tried, 'path': new_path} - - -# here goes monkeypatching -RegexURLPattern.resolve_to_name = _pattern_resolve_to_name -RegexURLResolver.resolve_to_name = _resolver_resolve_to_name - - -def resolve_to_name(path, urlconf=None): - return get_resolver(urlconf).resolve_to_name(path) - - -@register.filter -def resolve_url_name(value): - return resolve_to_name(value) - - def resolve_arguments(context, src_args): args = [] kwargs = {} diff --git a/apps/navigation/utils.py b/apps/navigation/utils.py new file mode 100644 index 0000000000..6c008e5576 --- /dev/null +++ b/apps/navigation/utils.py @@ -0,0 +1,45 @@ +#http://www.djangosnippets.org/snippets/1378/ + +from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver + + +__all__ = ('resolve_to_name',) + + +def _pattern_resolve_to_name(self, path): + match = self.regex.search(path) + if match: + name = "" + if self.name: + name = self.name + elif hasattr(self, '_callback_str'): + name = self._callback_str + else: + name = "%s.%s" % (self.callback.__module__, self.callback.func_name) + return name + + +def _resolver_resolve_to_name(self, path): + tried = [] + match = self.regex.search(path) + if match: + new_path = path[match.end():] + for pattern in self.url_patterns: + try: + name = pattern.resolve_to_name(new_path) + except Resolver404, e: + tried.extend([(pattern.regex.pattern + ' ' + t) for t in e.args[0]['tried']]) + else: + if name: + return name + tried.append(pattern.regex.pattern) + raise Resolver404, {'tried': tried, 'path': new_path} + + +# here goes monkeypatching +RegexURLPattern.resolve_to_name = _pattern_resolve_to_name +RegexURLResolver.resolve_to_name = _resolver_resolve_to_name + + +def resolve_to_name(path, urlconf=None): + return get_resolver(urlconf).resolve_to_name(path)