from django.conf import settings from django import template register = template.Library() re_attrs = template.re.compile('(\w+)="(.*?)"') class IconNode(template.Node): def __init__(self, icon, nodelist): self.icon = icon self.nodelist = nodelist self.attrs = {"src": "%sicons/%s.png" % (settings.MEDIA_URL, self.icon), "class": "icon16", "alt": ""} def render(self, context): attrs = self.attrs.copy() for key, value in re_attrs.findall(self.nodelist.render(context)): if key in attrs: attrs[key] = "%s %s" % (attrs[key], value) else: attrs[key] = value return u'' % " ".join('%s="%s"' % attr for attr in attrs.iteritems()) @register.tag("icon") def parse_icon(parser, token): parts = token.contents.strip().split(None, 2) return IconNode(parts[1], template.Template(parts[2]).nodelist)