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 |
BREADCRUMBS_HOME_LABEL |
Home |
Default label for the root path |
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
Using django's translation support
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.
Source Distribution
Built Distribution
Hashes for django-view-breadcrumbs-2.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c71850cf93a86c54aad646e0c598ea3f0563bdb20dd14c36998bbd83462978c |
|
MD5 | b729f77d81f2b53fffefe1dcf16f32b4 |
|
BLAKE2b-256 | bab3b800a2fa0a023d3db70965ecada7c30342f5494a009c7561ccb6bd9996e7 |
Hashes for django_view_breadcrumbs-2.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f089a11866ff7faba5ab3d8a0ab474967d9ff2db219f97ce5bd97fe8af6e388 |
|
MD5 | 2138159b9ec850e9195cb6dd8050d1cd |
|
BLAKE2b-256 | 8502696739ea94fdb69934ae242886ad10b32bc94faa8ddb914a8ae7e564f568 |