Skip to content

Instantly share code, notes, and snippets.

@bmispelon
Created September 26, 2012 13:11
Show Gist options
  • Save bmispelon/3787948 to your computer and use it in GitHub Desktop.
Save bmispelon/3787948 to your computer and use it in GitHub Desktop.
A django template tag for summing sequences
from django import template
register = template.Library()
class SumNode(template.Node):
def __init__(self, sequence, loopvar, loopitem):
self.sequence = template.Variable(sequence)
self.loopvar = loopvar
self.loopitem = template.Variable(loopitem)
def render(self, context):
sequence = self.sequence.resolve(context)
return sum(self.loopitem.resolve({self.loopvar: x}) for x in sequence)
@register.tag('sum')
def do_sum(parser, token):
"""{% sum <foo.bar> for <foo> in <sequence> %}"""
bits = token.split_contents()[1:]
try:
loopitem, _for, loopvar, _in, sequence = bits
except ValueError:
raise template.TemplateSyntaxError("Invalid tag syntax expected"
" '{% sum <foo.bar> for <foo> in <sequence> %}'")
return SumNode(sequence, loopvar, loopitem)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment