GithubHelp home page GithubHelp logo

chronossc / django-breadcrumbs Goto Github PK

View Code? Open in Web Editor NEW
105.0 9.0 29.0 103 KB

Easy to use generic breadcrumbs system for Django framework.

Home Page: http://code.google.com/p/django-breadcrumbs/

License: Other

Shell 1.79% Python 92.59% HTML 5.61%

django-breadcrumbs's Introduction

Django Breadcrumbs

django-breadcrumbs is a breadcrumb system to Django framework that allow you to add custom breadcrumbs for simple views, generic views and support Django FlatPages app.

It works as a pluggable middleware that add a breadcrumbs callable/iterable in your request object, allowing you to set breadcrumbs (one or more) in each view accepting objects, lists or tuples added from request.breadcrumbs and is iterable, easy to use in templates providing a object with name and url attributes.

Django versions support.

Breadcrumbs support 1.3.x and 1.4.x releases of Django. Django 1.2.x support was dropped in django-breadcrumbs-1.1.3.

My support will follow Django policy.

#1 - Install django-breadcrumbs

Add breadcrumbs.middleware.BreadcrumbsMiddleware to your MIDDLEWARE_CLASSES and breadcrumbs to your INSTALLED_APPS.

The middleware store breadcrumbs in request, and the app is needed to enable Django signals in breadcrumbs app.

Also, if you did't put request context processor on yours TEMPLATE_CONTEXT_PROCESSORS, add it, ex:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.request'
)

#2 - Adding breadcrumbs

To add breadcrumbs you just need to call request.breadcrumbs('Title',url), ex:

def about(request):
	request.breadcrumbs(_("About"),request.path_info)
	...

def generic_crud_view(request,model,action):
	"""
	model = model name
	action = action name
	"""

	request.breadcrumbs([
		(_(model.title()),'/crud/%s' % model),
		(_('%s %s') % (action.title(),model.title()),'/crud/%s/%s' % (model,action)),
	])

	...

All modes of add a breadcrumb:

# one by one
request.breadcrumbs( name, url )

# various tuples/lists
request.breadcrumbs( ( (name1, url1), (name2, url2), (name3, url3), ...,) )
request.breadcrumbs( [ [name1, url1], [name2, url2], [name3, url3], ...] )

# objects with attributes name and url in list / tuple format:
request.breadcrumbs( ( obj1, obj2, obj3, obj4, ......) )
request.breadcrumbs( [ obj1, obj2, obj3, obj4, ......] )

Note: You can use request.breadcrumbs safely in any middleware after BreadcrumbsMiddleware or any place where you have request object after BreadcrumbsMiddleware are processed

#3 - Enable FlatPages + Breadcrumbs

FlatPages is a app that allow user create urls with static content and a title. But create breadcrumbs for this kind of 'unknow' url path isn't fun at all, so I modified FlatpageFallbackMiddleware to fill breadcrumbs for each flat page in path.

Is really easy to use, just add breadcrumbs.middleware.FlatpageFallbackMiddleware in your MIDDLEWARE_CLASSES after BreadcrumbsMiddleware and remove Django FlatpageFallbackMiddleware. Now you flat pages will be in breadcrumbs too.

FlatpageFallbackMiddleware will call breadcrumbs.views.flatpage, that as bonus, cache results of FlatPage models, avoiding DB in every request, and in every part of breadcrumb.

Flatpages in urls.py.

Django also supports Flatpages in urls.py, as doc in http://goo.gl/iCvf3 show. To use this way, do something like:

urlpatterns = patterns('',
    (r'^pages/', include('breadcrumbs.urls')),
)

urlpatterns += patterns('breadcrumbs.views',
    (r'^pages2/(?P<url>.*)$', 'flatpage'),
)

urlpatterns += patterns('breadcrumbs.views',
    url(r'^license/$', 'flatpage', {'url': '/flat04/'}, name='license'),
)

#4 - Using in templates

To use breadcrumbs in template, only that you need is iterate over breadcrumbs, example:

{% for breadcrumb in request.breadcrumbs %}
<a href="{{ breadcrumb.url }}">{{ breadcrumb.name }}</a>{% if not forloop.last %} &raquo; {% endif %}
{% endfor %}

#5 - Options

django-breadcrumbs have a single option to set in your settings.py:

BREADCRUMBS_AUTO_HOME: defaults to False, If True, breadcrumbs add as first Breadcrumb in list (_("Home"),u"/")
BREADCRUMBS_HOME_TITLE: defaults to _(u'Home')

django-breadcrumbs's People

Contributors

adam-iris avatar alurin avatar bashu avatar chaosk avatar chronossc avatar elena avatar emperorcezar avatar eriktelepovsky avatar shabble avatar sharpek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

django-breadcrumbs's Issues

Unit tests in the django flatpage's app fail when breadcrumbs FlatpageFallbackMiddleware is enabled.

Django 1.2

To reproduce:

  1. add 'django.contrib.flatpages' to INSTALLED_APPS
  2. add 'breadcrumbs.middleware.BreadcrumbsMiddleware' and 'breadcrumbs.middleware.FlatpageFallbackMiddleware' to MIDDLEWARE_CLASSES
  3. ./manage.py test flatpages

Result:
FAIL: test_fallback_flatpage (django.contrib.flatpages.tests.views.FlatpageViewTests)
A fallback flatpage won't be served if the middleware is disabled

Traceback (most recent call last):
  File "<redacted>/lib/python2.7/site-packages/django/contrib/flatpages/tests/views.py", line 48, in test_fallback_flatpage
    self.assertEquals(response.status_code, 404)
AssertionError: 200 != 404

Write unit tests

Unit tests today is something that I, even, can't call ugly ...

Write descent unit tests and try to make it compatible with Django 1.2.x, 1.3.x, and 1.4.x

Django 1.10 support?

When upgrading my project to Django 1.10 and adopted the new MIDDLEWARE setting instead of the deprecated one (MIDDLEWARE_CLASSES), django-breadcrumbs crashes as its not compatible with this new Django 1.10 setting.

Are you planning to provide support for this?

Why is Breadcrumbs a Singleton?

I notice Breadcrumbs is a singleton. Won't this give each user on the system the same breadcrumb trail? That is not desirable, is it?

Also, why does the middleware's process_request call the _clean method? Doesn't that dump all the existing crumbs, thereby leaving only the single crumb added by the view, thereby defeating the purpose of breadcrumbs?

Am I missing something about how this application is intended to be used?

Thanks,

--Stuart

Add a small note on the context_processor

Hi

Can you update the wiki that the settings.py should also contain TEMPLATE_CONTEXT_PROCESSORS
especially the 'django.core.context_processors.request',

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
'django.core.context_processors.request',
)

Thanks
Vemu

Breadcrumbs don't resolve when using the 'catchall' url pattern in urls.py for flatpages

If you are using Django's flatpages app, the following will work with django-breadcrumbs:

urlpatterns = patterns('',
    url(r'^flatpage/childflatpage/childchildflatpage', include('django.contrib.flatpages.urls')),
    url(r'^flatpage/childflatpage/', include('django.contrib.flatpages.urls')),
    url(r'^flatpage/', include('django.contrib.flatpages.urls')),
)

This gets cumbersome if you have many flatpages. A common approach to handle this is to specify a catchall term as the last entry in urls.py:

# Your other patterns here
urlpatterns += patterns('django.contrib.flatpages.views',
    (r'^(?P<url>.*)$', 'flatpage'),
)

Implementing the latter scenario with django-breadcrumbs (at least under Django 1.4) results in no breadcrumbs being generated.

Is this intentional, a side-effect, or a bug? I am not entirely sure.

This project needs a maintainer

Hi,

This repository seems to lack maintenance, I propose myself as a new maintainer.

Could you transfer it on my account in github or give me the right to push in your repository ?

Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.