from django import template from django.utils.safestring import mark_safe from django.utils.html import conditional_escape register = template.Library() def check_autoescape(autoescape): if autoescape: return conditional_escape return lambda x: x @register.filter def breadcrumbs(path, args, autoescape=None): """Usage: url|breadcrumbs:"home_link,li_class Pass home_link empty if you just want to set li_class Returns <li> elements representing breadcrumbs of your current location""" esc = check_autoescape(autoescape) home_link, sep, li_class = args.partition(',') if li_class: li_class = ' class="%s"' % (esc(li_class)) link_base = '/' output = ['<li><a title="/" href="/">%s/</a></li>' % (esc(home_link))] for crumb in path.strip("/").split("/"): if crumb: output.append('<li><a title="%(link_base)s%(crumb)s" href="%(link_base)s%(crumb)s/"%(li_class)s>%(crumb)s/</a></li>' % {'link_base': link_base, 'crumb': esc(crumb), 'li_class': li_class}) link_base += '%s/' % (esc(crumb)) return mark_safe(''.join(output)) breadcrumbs.needs_autoescape = True