Index: django/template/defaulttags.py =================================================================== --- django/template/defaulttags.py (revision 3122) +++ django/template/defaulttags.py (working copy) @@ -195,6 +195,23 @@ and_ = 0, or_ = 1 +class Group(list): + def __init__(self, grouper, groups): + self.grouper = grouper + super(Group, self).__init__(groups) + + def __str__(self): + return str(self.grouper) + + # for backwards compatability + def __getitem__(self, key): + if key == 'list': + return self + elif key == 'grouper': + return self.grouper + else: + raise KeyError + class RegroupNode(Node): def __init__(self, target, expression, var_name): self.target, self.expression = target, expression @@ -205,14 +222,14 @@ if obj_list == '': # target_var wasn't found in context; fail silently context[self.var_name] = [] return '' - output = [] # list of dictionaries in the format {'grouper': 'key', 'list': [list of contents]} + output = [] # list of Group objects for obj in obj_list: grouper = self.expression.resolve(Context({'var': obj})) # TODO: Is this a sensible way to determine equality? - if output and repr(output[-1]['grouper']) == repr(grouper): - output[-1]['list'].append(obj) + if output and repr(output[-1].grouper) == repr(grouper): + output[-1].append(obj) else: - output.append({'grouper': grouper, 'list': [obj]}) + output.append(Group(grouper, [obj])) context[self.var_name] = output return '' @@ -722,9 +739,9 @@ {% regroup people by gender as grouped %}