from django import template register = template.Library() @register.tag def linkif(parser, token): """ Wraps everything between ``{% linkif %}`` and ``{% endlinkif %}`` inside a ``link`` if ``link`` is not False. Sample usage:: {% linkif "http://example.com" %}link{% endlinkif %} {% linkif object.url %}link only if object has an url{% endlinkif %} """ bits = token.split_contents() if len(bits) != 2: raise template.TemplateSyntaxError("'%s' takes one argument" " (link)" % bits[0]) link = parser.compile_filter(bits[1]) nodelist = parser.parse(('endlinkif',)) parser.delete_first_token() return LinkIfNode(nodelist, link) class LinkIfNode(template.Node): def __init__(self, nodelist, link): self.link = link self.nodelist = nodelist def render(self, context): output = self.nodelist.render(context) link = self.link.resolve(context) if link: output = '%s' % (link, output) return output