Django generic view breadcrumbs
Project description
django-view-breadcrumbs
This provides a generic set of breadcrumb mixin classes.
Requires adding {% render_breadcrumbs %}
to just the base template.
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 view_breadcrumbs %}
{% block breadcrumbs %}
{% render_breadcrumbs %} {# Optionally provide a template e.g {% render_breadcrumbs "view_breadcrumbs/bootstrap5.html" %} #}
{% endblock %}
And your create.html
.
{% extends 'base.html' %}
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',
...,
]
Settings
Name | Default | Description | Options |
---|---|---|---|
BREADCRUMBS_TEMPLATE |
'view_breadcrumbs/bootstrap4.html' |
Template used to render breadcrumbs. | Predefined Templates |
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.
Settings:
To modify the root label site wide use
BREADCRUMBS_HOME_LABEL
- Sets the root label (default: Home
)
Example
BREADCRUMBS_HOME_LABEL = 'My new home'
Renders
View Configuration:
NOTE: All url config should use a pattern
view_name=model_verbose_name_{action}
Actions | View Class | View name | Sample Breadcrumb |
---|---|---|---|
list |
ListView |
{model.verbose_name}_list |
Home / Posts |
change |
UpdateView |
{model.verbose_name}_change |
Home / Posts / Test - Post / Update Test - Post |
detail |
DetailView |
{model.verbose_name}_detail |
Home / Posts / Test - Post |
Sample crumbs: Home / Posts / Test - Post
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'
Sample crumbs: Posts
All crumbs use the home root path
/
as the base this can be excluded by specifyingadd_home = False
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
from demo.models import TestModel
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
from django.urls import reverse
from django.views.generic import ListView
from view_breadcrumbs import ListBreadcrumbMixin
from demo.models import TestModel
from django.utils.functional import cached_property
class TestView(ListBreadcrumbMixin, ListView):
model = TestModel
template_name = 'app/test/test-list.html'
@cached_property
def crumbs(self):
return [('My Test Breadcrumb', reverse('test_list_view'))]
Overriding the Home label for a specific view
from django.utils.translation import gettext_lazy as _
from view_breadcrumbs import DetailBreadcrumbMixin
from django.views.generic import DetailView
from demo.models import TestModel
class TestDetailView(DetailBreadcrumbMixin, DetailView):
model = TestModel
home_label = _('My custom home')
template_name = 'demo/test-detail.html'
Refer to the demo app for more examples.
Running locally
$ make install-dev
$ make migrate
$ make run
Spins up a django server running the demo app.
Visit http://127.0.0.1:8090
Credits
Contributors ✨
Thanks goes to these wonderful people (emoji key):
Derek 📖 |
This project follows the all-contributors specification. Contributions of any kind welcome!
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.