"""used to shuffle a list in a template """ import random from django import template class ShuffleNode(template.Node): """node for shuffling iterable object in place in template""" def __init__(self, iterable_var): self.iterable_var = template.Variable(iterable_var) def render(self, context): # resolve the article object from the context iterable_var = self.iterable_var.resolve(context) # shuffle it iterable_var = [x for x in iterable_var] random.shuffle(iterable_var) # save result in context and return context[self.iterable_var] = iterable_var return '' register = template.Library() @register.tag def shuffle(parser, token): """shuffle a list within a template {% shuffle iterable_object %} """ contents = token.split_contents() if len(contents) == 2: tag_name, iterable_var = contents else: msg = "%r tag requires 1 argument" % token.contents.split()[0] raise template.TemplateSyntaxError, msg return ShuffleNode(iterable_var)