code: def breadcrumb_nav(context):
      
      breadcrumb = []
      dashboard = context.request.horizon['dashboard']
      try:
          panel_groups = dashboard.get_panel_groups()
      except KeyError:
          panel_groups = None
      panel_group = None
      panel = context.request.horizon['panel']
  
      # Add panel group, if there is one
      if panel_groups:
          for group in panel_groups.values():
              if panel.slug in group.panels and group.slug != 'default':
                  panel_group = group
                  break
  
      # Remove panel reference if that is the current page
      if panel.get_absolute_url() == context.request.path:
          panel = None
  
      # Get custom breadcrumb, if there is one.
      custom_breadcrumb = context.get('custom_breadcrumb')
  
      # Build list of tuples (name, optional url)
      breadcrumb.append((dashboard.name, None))
      if panel_group:
          breadcrumb.append((panel_group.name, None))
      if panel:
          breadcrumb.append((panel.name, panel.get_absolute_url()))
      if custom_breadcrumb:
          breadcrumb.extend(custom_breadcrumb)
      breadcrumb.append((context.get('page_title'), None))
  
      return {'breadcrumb': breadcrumb}
docs: A logic heavy function for automagically creating a breadcrumb.
  
      It uses the dashboard, panel group(if it exists), then current panel.
      Can also use a "custom_breadcrumb" context item to add extra items.