Moved path resolving code to navigation.utils

This commit is contained in:
Roberto Rosario
2011-04-16 01:52:04 -04:00
parent 103236a95f
commit 6143ffdb3a
2 changed files with 46 additions and 49 deletions

View File

@@ -2,7 +2,6 @@ import copy
import re import re
from django.core.urlresolvers import reverse, NoReverseMatch from django.core.urlresolvers import reverse, NoReverseMatch
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver
from django.template import TemplateSyntaxError, Library, \ from django.template import TemplateSyntaxError, Library, \
VariableDoesNotExist, Node, Variable VariableDoesNotExist, Node, Variable
from django.utils.text import unescape_string_literal 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, \ from navigation.api import object_navigation, multi_object_navigation, \
menu_links as menu_navigation menu_links as menu_navigation
from navigation.forms import MultiItemForm from navigation.forms import MultiItemForm
from navigation.utils import resolve_to_name
register = Library() register = Library()
@@ -71,54 +71,6 @@ def main_navigation(parser, token):
return NavigationNode(navigation=menu_navigation) 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): def resolve_arguments(context, src_args):
args = [] args = []
kwargs = {} kwargs = {}

45
apps/navigation/utils.py Normal file
View File

@@ -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)