Hi, I developed this method to create breadcrumbs.
What do you think about it? Thomas # Python from urlparse import urljoin # Django from django import http from django.core import urlresolvers from django.core.urlresolvers import reverse from django.conf import settings from django.utils.http import urlquote ''' Simple Breadcrumbs for Django: The value of request.path gets examined and all views of the'upper' urls need to have an attribute 'breadcrumbs'. They get added to the list of breadcrumbs. The attribute can be a string or a method. If it is a method it needs to accept two arguments (args and kwargs) which correspond to the arguments of the view. Example: request.path == '/users/foo/settings/' Views: def settings(request, ...): ... settings.breadcrumbs=u'Settings' def user(request, username): ... user.breadcrumbs=lambda args, kwargs: args[1] def users(request): ... users.breadcrumbs='Users' Breadcrumbs: Users>>foo>Settings All except the last breadcrumb will be links the views. Implemented with resolve(url) ''' def get_breadcrumbs(request): url=request.path breadcrumbs=[] urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF) resolver = urlresolvers.RegexURLResolver(r'^/', urlconf) while url: callback=None try: callback, callback_args, callback_kwargs = resolver.resolve(url) except http.Http404, e: pass else: bc=getattr(callback, 'breadcrumbs', None) assert bc!=None, u'Callback %s.%s function breadcrumbs does not exist.' % ( callback.__module__, callback.__name__) if not isinstance(bc, basestring): bc=bc(callback_args, callback_kwargs) if url!=request.path: bc=u'<a href="%s">%s</a>' % ( urlquote(url), bc) breadcrumbs.append(bc) # Parent URL heraussuchen. url=urljoin(url, '..') if url=='/': break if not breadcrumbs: return '' breadcrumbs.append('') breadcrumbs.reverse() return u'<div class="breadcrumbs">%s</div>' % ('>>'.join(breadcrumbs)) def test_all_views(): u''' Unittest: Check if all you views have a breadcrumbs() attribute. Django views are ignored. ''' urlconf=settings.ROOT_URLCONF resolver=urlresolvers.RegexURLResolver(r'^/', urlconf) missing=[] for function, patterns in resolver.reverse_dict.items(): if not function: continue sub_resolver=patterns[0] if function.__module__.startswith('django'): continue name='%s.%s' % (function.__module__, function.__name__) if not hasattr(function, 'breadcrumbs'): missing.append(name) bc=function.breadcrumbs if isinstance(bc, basestring): try: unicode(bc) except UnicodeError, exc: missing.append('UnicodeError, %s: %s' % (name, exc)) missing.sort() assert not missing, 'Missing breadcumbs function: %s' % (missing) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---