Django generic view breadcrumbs
Project description
django-view-breadcrumbs
This extends django-bootstrap-breadcrumbs providing generic breadcrumb mixin classes.
Replaces having to add {% breadcrumb $label $viewname [*args] [**kwargs] %}
to every template.
Breadcrumb mixin classes provided.
BaseBreadcrumbMixin
- Base view requires acrumbs
class property.CreateBreadcrumbMixin
- For create viewsHome \ Posts \ Add Post
DetailBreadcrumbMixin
- For detail viewsHome \ Posts \ Post 1
ListBreadcrumbMixin
- For list viewsHome \ Posts
UpdateBreadcrumbMixin
- For Update viewsHome \ Posts \ Post 1 \ Update Post 1
Installation:
$ pip install django-view-breadcrumbs
Add app to your INSTALLED_APPS
INSTALLED_APPS = [
...
'view-breadcrumbs',
...
]
Usage:
django-view-breadcrumbs
includes generic mixins that can be added to a class based view.
Using the generic breadcrumb mixin each breadcrumb will be added to the view dynamically
and can be overridden by providing a crumbs
property.
Sample crumbs: Home \ Posts \ Test - Post
NOTE: All url config should use a pattern
view_name=model_verbose_name_{action}
i.eview_name=post_detail
for detail view.
Actions include:
- "list" -
ListView
- "change" -
UpdateView
- "detail" -
DetailView
In your urls.py
urlpatterns = [
...
path('posts/<slug:slug>', views.PostDetail.as_view(), name='post_detail'),
...
]
views.py
from django.views.generic import DetailView
from view_breadcrumbs import DetailBreadcrumbMixin
class PostDetail(DetailBreadcrumbMixin, DetailView):
model = Post
template_name = 'app/post/detail.html'
In the base.html
template simply add the render_breadcrumbs
tag and any template
that inherits the base should have breadcrumbs included.
i.e
base.html
{% load django_bootstrap_breadcrumbs %}
{% block breadcrumbs %}
{% render_breadcrumbs %}
{% endblock %}
And your create.html
.
{% extends 'base.html' %}
All crumbs use the home root path
\
as the base this can be excluded by specifyingadd_home = False
Sample crumbs: Posts
from django.views.generic import ListView
from view_breadcrumbs import ListBreadcrumbMixin
class PostList(ListBreadcrumbMixin, ListView):
model = Post
template_name = 'app/post/list.html'
add_home = False
Can also override the view breadcrumb by specifying a list of tuples
[(Label, view path)]
.
Custom crumbs: Home \ My Test Breadcrumb
URL conf.
urlpatterns = [
path('my-test-list-view/', views.TestView.as_view(), name='test_list_view'),
path('my-test-detail-view/<int:pk>/', views.TestView.as_view(), name='test_detail_view'),
]
views.py
from django.urls import reverse
from django.views.generic import ListView
from view_breadcrumbs import ListBreadcrumbMixin
class TestView(ListBreadcrumbMixin, ListView):
model = TestModel
template_name = 'app/test/test-list.html'
crumbs = [('My Test Breadcrumb', reverse('test_list_view')] # OR reverse_lazy
OR
class TestView(ListBreadcrumbMixin, ListView):
model = TestModel
template_name = 'app/test/test-list.html'
@cached_property
def crumbs(self):
return super(TestView, self).crumbs + [
(self.object.name , reverse('test_detail_view', kwargs={'pk': self.object.pk})
]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.