Exemple #1
0
 def _get_reverse_dict(self):
     if not self._reverse_dict and hasattr(self.urlconf_module,
                                           'urlpatterns'):
         lookups = MultiValueDict()
         for pattern in reversed(self.urlconf_module.urlpatterns):
             p_pattern = pattern.regex.pattern
             if p_pattern.startswith('^'):
                 p_pattern = p_pattern[1:]
             if isinstance(pattern, RegexURLResolver):
                 parent = normalize(pattern.regex.pattern)
                 for name in pattern.reverse_dict:
                     for matches, pat in pattern.reverse_dict.getlist(name):
                         new_matches = []
                         for piece, p_args in parent:
                             new_matches.extend([
                                 (piece + suffix, p_args + args)
                                 for (suffix, args) in matches
                             ])
                         lookups.appendlist(name,
                                            (new_matches, p_pattern + pat))
             else:
                 bits = normalize(p_pattern)
                 lookups.appendlist(pattern.callback, (bits, p_pattern))
                 lookups.appendlist(pattern.name, (bits, p_pattern))
         self._reverse_dict = lookups
     return self._reverse_dict
Exemple #2
0
 def _populate(self):
     lookups = MultiValueDict()
     namespaces = {}
     apps = {}
     for pattern in reversed(self.url_patterns):
         p_pattern = pattern.regex.pattern
         if p_pattern.startswith('^'):
             p_pattern = p_pattern[1:]
         if isinstance(pattern, RegexURLResolver):
             if pattern.namespace:
                 namespaces[pattern.namespace] = (p_pattern, pattern)
                 if pattern.app_name:
                     apps.setdefault(pattern.app_name, []).append(pattern.namespace)
             else:
                 parent = normalize(pattern.regex.pattern)
                 for name in pattern.reverse_dict:
                     for matches, pat in pattern.reverse_dict.getlist(name):
                         new_matches = []
                         for piece, p_args in parent:
                             new_matches.extend([(piece + suffix, p_args + args) for (suffix, args) in matches])
                         lookups.appendlist(name, (new_matches, p_pattern + pat))
                 for namespace, (prefix, sub_pattern) in pattern.namespace_dict.items():
                     namespaces[namespace] = (p_pattern + prefix, sub_pattern)
                 for app_name, namespace_list in pattern.app_dict.items():
                     apps.setdefault(app_name, []).extend(namespace_list)
         else:
             bits = normalize(p_pattern)
             lookups.appendlist(pattern.callback, (bits, p_pattern))
             lookups.appendlist(pattern.name, (bits, p_pattern))
     self._reverse_dict = lookups
     self._namespace_dict = namespaces
     self._app_dict = apps
Exemple #3
0
 def _populate(self):
     lookups = MultiValueDict()
     namespaces = {}
     apps = {}
     for pattern in reversed(self.url_patterns):
         p_pattern = pattern.regex.pattern
         if p_pattern.startswith('^'):
             p_pattern = p_pattern[1:]
         if isinstance(pattern, RegexURLResolver):
             if pattern.namespace:
                 namespaces[pattern.namespace] = (p_pattern, pattern)
                 if pattern.app_name:
                     apps.setdefault(pattern.app_name, []).append(pattern.namespace)
             else:
                 parent = normalize(pattern.regex.pattern)
                 for name in pattern.reverse_dict:
                     for matches, pat in pattern.reverse_dict.getlist(name):
                         new_matches = []
                         for piece, p_args in parent:
                             new_matches.extend([(piece + suffix, p_args + args) for (suffix, args) in matches])
                         lookups.appendlist(name, (new_matches, p_pattern + pat))
                 for namespace, (prefix, sub_pattern) in pattern.namespace_dict.items():
                     namespaces[namespace] = (p_pattern + prefix, sub_pattern)
                 for app_name, namespace_list in pattern.app_dict.items():
                     apps.setdefault(app_name, []).extend(namespace_list)
         else:
             bits = normalize(p_pattern)
             lookups.appendlist(pattern.callback, (bits, p_pattern))
             lookups.appendlist(pattern.name, (bits, p_pattern))
     self._reverse_dict = lookups
     self._namespace_dict = namespaces
     self._app_dict = apps
Exemple #4
0
 def _get_reverse_dict(self):
     if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
         for pattern in reversed(self.urlconf_module.urlpatterns):
             if isinstance(pattern, RegexURLResolver):
                 for key, value in pattern.reverse_dict.items():
                     self._reverse_dict[key] = (pattern,) + value
             else:
                 self._reverse_dict[pattern.callback] = (pattern,)
                 self._reverse_dict[pattern.name] = (pattern,)
     return self._reverse_dict
 def _get_reverse_dict(self):
     if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
         for pattern in reversed(self.urlconf_module.urlpatterns):
             if isinstance(pattern, RegexURLResolver):
                 for key, value in pattern.reverse_dict.iteritems():
                     self._reverse_dict[key] = (pattern,) + value
             else:
                 self._reverse_dict[pattern.callback] = (pattern,)
                 self._reverse_dict[pattern.name] = (pattern,)
     return self._reverse_dict
Exemple #6
0
    def render(self, context):
        if 'forloop' in context:
            parentloop = context['forloop']
        else:
            parentloop = {}
        context.push()
        try:
            values = self.sequence.resolve(context, True)
        except VariableDoesNotExist:
            values = []
        if values is None:
            values = []
        if not hasattr(values, '__len__'):
            values = list(values)
        len_values = len(values)
        if len_values < 1:
            context.pop()
            return self.nodelist_empty.render(context)
        nodelist = NodeList()
        if self.is_reversed:
            values = reversed(values)
        unpack = len(self.loopvars) > 1
        # Create a forloop value in the context.  We'll update counters on each
        # iteration just below.
        loop_dict = context['forloop'] = {'parentloop': parentloop}
        for i, item in enumerate(values):
            # Shortcuts for current loop iteration number.
            loop_dict['counter0'] = i
            loop_dict['counter'] = i + 1
            # Reverse counter iteration numbers.
            loop_dict['revcounter'] = len_values - i
            loop_dict['revcounter0'] = len_values - i - 1
            # Boolean values designating first and last times through loop.
            loop_dict['first'] = (i == 0)
            loop_dict['last'] = (i == len_values - 1)

            if unpack:
                # If there are multiple loop variables, unpack the item into
                # them.
                context.update(dict(zip(self.loopvars, item)))
            else:
                context[self.loopvars[0]] = item
            for node in self.nodelist_loop:
                nodelist.append(node.render(context))
            if unpack:
                # The loop variables were pushed on to the context so pop them
                # off again. This is necessary because the tag lets the length
                # of loopvars differ to the length of each set of items and we
                # don't want to leave any vars from the previous loop on the
                # context.
                context.pop()
        context.pop()
        return nodelist.render(context)
Exemple #7
0
    def render(self, context):
        if 'forloop' in context:
            parentloop = context['forloop']
        else:
            parentloop = {}
        context.push()
        try:
            values = self.sequence.resolve(context, True)
        except VariableDoesNotExist:
            values = []
        if values is None:
            values = []
        if not hasattr(values, '__len__'):
            values = list(values)
        len_values = len(values)
        if len_values < 1:
            context.pop()
            return self.nodelist_empty.render(context)
        nodelist = NodeList()
        if self.is_reversed:
            values = reversed(values)
        unpack = len(self.loopvars) > 1
        # Create a forloop value in the context.  We'll update counters on each
        # iteration just below.
        loop_dict = context['forloop'] = {'parentloop': parentloop}
        for i, item in enumerate(values):
            # Shortcuts for current loop iteration number.
            loop_dict['counter0'] = i
            loop_dict['counter'] = i+1
            # Reverse counter iteration numbers.
            loop_dict['revcounter'] = len_values - i
            loop_dict['revcounter0'] = len_values - i - 1
            # Boolean values designating first and last times through loop.
            loop_dict['first'] = (i == 0)
            loop_dict['last'] = (i == len_values - 1)

            if unpack:
                # If there are multiple loop variables, unpack the item into
                # them.
                context.update(dict(zip(self.loopvars, item)))
            else:
                context[self.loopvars[0]] = item
            for node in self.nodelist_loop:
                nodelist.append(node.render(context))
            if unpack:
                # The loop variables were pushed on to the context so pop them
                # off again. This is necessary because the tag lets the length
                # of loopvars differ to the length of each set of items and we
                # don't want to leave any vars from the previous loop on the
                # context.
                context.pop()
        context.pop()
        return nodelist.render(context)
Exemple #8
0
 def _get_reverse_dict(self):
     if not self._reverse_dict:
         for pattern in reversed(self.url_patterns):
             p_pattern = pattern.regex.pattern
             if p_pattern.startswith('^'):
                 p_pattern = p_pattern[1:]
             if isinstance(pattern, RegexURLResolver):
                 parent = normalize(pattern.regex.pattern)
                 for name in pattern.reverse_dict:
                     for matches, pat in pattern.reverse_dict.getlist(name):
                         new_matches = []
                         for piece, p_args in parent:
                             new_matches.extend([(piece + suffix, p_args + args) for (suffix, args) in matches])
                         self._reverse_dict.appendlist(name, (new_matches, p_pattern + pat))
             else:
                 bits = normalize(p_pattern)
                 self._reverse_dict.appendlist(pattern.callback, (bits, p_pattern))
                 self._reverse_dict.appendlist(pattern.name, (bits, p_pattern))
     return self._reverse_dict
Exemple #9
0
 def _get_reverse_dict(self):
     if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
         for pattern in reversed(self.urlconf_module.urlpatterns):
             p_pattern = pattern.regex.pattern
             if p_pattern.startswith('^'):
                 p_pattern = p_pattern[1:]
             if isinstance(pattern, RegexURLResolver):
                 parent = normalize(pattern.regex.pattern)
                 for name, (matches, pat) in pattern.reverse_dict.items():
                     new_matches = []
                     for piece, p_args in parent:
                         new_matches.extend([(piece + suffix, p_args + args)
                                 for (suffix, args) in matches])
                     self._reverse_dict[name] = new_matches, p_pattern + pat
             else:
                 bits = normalize(p_pattern)
                 self._reverse_dict[pattern.callback] = bits, p_pattern
                 self._reverse_dict[pattern.name] = bits, p_pattern
     return self._reverse_dict
 def _get_reverse_dict(self):
     if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
         for pattern in reversed(self.urlconf_module.urlpatterns):
             p_pattern = pattern.regex.pattern
             if p_pattern.startswith('^'):
                 p_pattern = p_pattern[1:]
             if isinstance(pattern, RegexURLResolver):
                 parent = normalize(pattern.regex.pattern)
                 for name, (matches, pat) in pattern.reverse_dict.iteritems():
                     new_matches = []
                     for piece, p_args in parent:
                         new_matches.extend([(piece + suffix, p_args + args)
                                 for (suffix, args) in matches])
                     self._reverse_dict[name] = new_matches, p_pattern + pat
             else:
                 bits = normalize(p_pattern)
                 self._reverse_dict[pattern.callback] = bits, p_pattern
                 self._reverse_dict[pattern.name] = bits, p_pattern
     return self._reverse_dict