Custom template tag to print a link instead of a date string

[ permalink ] [ download ]
from django import template

register = template.Library()

@register.tag(name="link_to_date")
def do_link_to_date(parser, token):
    try:
        tag_name, date_time, link_type = token.contents.split()
    except ValueError:
        msg = '%r tag requires a single argument' % token.contents[0]
        raise template.TemplateSyntaxError(msg)

    date_time = parser.compile_filter(date_time)
    return LinkToDateNode(date_time, link_type[1:-1])

class LinkToDateNode(template.Node):

    def __init__(self, date_time, link_type):

        self.date_time = date_time
        self.link_type = link_type

    def render(self, context):
        try:
            date_time = unicode(self.date_time.resolve(context, True))
        except template.VariableDoesNotExist:
            date_time = u''
        try:
            if self.link_type == 'day':
                date = date_time.split()[0]
                linkdate = u'/'.join(date.split('-')[0:3])
            elif self.link_type == 'month':
                date = date_time.split()[0]
                linkdate = u'/'.join(date.split('-')[0:2])
            elif self.link_type == 'year':
                date = date_time.split()[0]
                linkdate = u'/'.join(date.split('-')[0:1])
            return u'<a href="/date/%s/">%s</a> %s' % (linkdate, date, date_time.split()[1])
        except:
            return date_time
hits counter