Changeset 5484
- Timestamp:
- 06/17/07 02:33:18 (1 year ago)
- Files:
-
- django/trunk/django/template/defaulttags.py (modified) (2 diffs)
- django/trunk/django/utils/itercompat.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/template/defaulttags.py
r5482 r5484 5 5 from django.template import get_library, Library, InvalidTemplateLibrary 6 6 from django.conf import settings 7 from django.utils.itercompat import groupby 7 8 import sys 8 9 import re … … 259 260 context[self.var_name] = [] 260 261 return () 261 output = [] # list of dictionaries in the format {'grouper': 'key', 'list': [list of contents]} 262 for obj in obj_list: 263 grouper = self.expression.resolve(obj, True) 264 # TODO: Is this a sensible way to determine equality? 265 if output and repr(output[-1]['grouper']) == repr(grouper): 266 output[-1]['list'].append(obj) 267 else: 268 output.append({'grouper': grouper, 'list': [obj]}) 269 context[self.var_name] = output 262 # List of dictionaries in the format 263 # {'grouper': 'key', 'list': [list of contents]}. 264 context[self.var_name] = [{'grouper':key, 'list':list(val)} for key, val in 265 groupby(obj_list, lambda v, f=self.expression.resolve: f(v, True))] 270 266 return () 271 267 django/trunk/django/utils/itercompat.py
r4265 r5484 8 8 9 9 def compat_tee(iterable): 10 """Return two independent iterators from a single iterable. 10 """ 11 Return two independent iterators from a single iterable. 11 12 12 13 Based on http://www.python.org/doc/2.3.5/lib/itertools-example.html … … 26 27 return gen(next), gen(next) 27 28 29 def groupby(iterable, keyfunc=None): 30 """ 31 Taken from http://docs.python.org/lib/itertools-functions.html 32 """ 33 if keyfunc is None: 34 keyfunc = lambda x:x 35 iterable = iter(iterable) 36 l = [iterable.next()] 37 lastkey = keyfunc(l) 38 for item in iterable: 39 key = keyfunc(item) 40 if key != lastkey: 41 yield lastkey, l 42 lastkey = key 43 l = [item] 44 else: 45 l.append(item) 46 yield lastkey, l 47 28 48 if hasattr(itertools, 'tee'): 29 49 tee = itertools.tee 30 50 else: 31 51 tee = compat_tee 52 if hasattr(itertools, 'groupby'): 53 groupby = itertools.groupby
