import random from django.template.defaulttags import register, Node, NodeList class Sometimes(Node): def __init__(self, parser, token): args = token.contents.split() if len(args) == 1: self.weight = .2 elif len(args) == 2: self.weight = float(args[1]) else: raise TemplateSyntaxError("Invalid arguments to 'sometimes': %s" % args) self.options = NodeList() while True: option = parser.parse( ('else', 'endsometimes') ) token = parser.next_token() self.options.append(option) if token.contents == 'else': continue else: parser.delete_first_token() break def render(self, context): if random.random() <= self.weight: return self.options[0].render(context) else: return self.options[1].render(context) register.tag("sometimes", Sometimes)