Skip to main content

Django generic view breadcrumbs

Project description

django-view-breadcrumbs

Build Status Codacy Badge PyPI version All Contributors

This provides a generic set of breadcrumb mixin classes.

Requires adding {% render_breadcrumbs %} to just the base template.

Screenshot

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 %}
{% endblock %}

And your create.html.

{% extends 'base.html' %}

Breadcrumb mixin classes provided.

  • BaseBreadcrumbMixin - Base view requires a crumbs class property.
  • CreateBreadcrumbMixin - For create views Home / Posts / Add Post
  • DetailBreadcrumbMixin - For detail views Home / Posts / Post 1
  • ListBreadcrumbMixin - For list views Home / Posts
  • UpdateBreadcrumbMixin - For Update views Home / 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.

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

Screenshot

Sample crumbs: Home / Posts / Test - Post

NOTE: All url config should use a pattern view_name=model_verbose_name_{action} i.e view_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'

Sample crumbs: Posts

All crumbs use the home root path / as the base this can be excluded by specifying add_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 migrate
$ make run

Spins up a django server running the demo app.

Visit http://127.0.0.1:8090

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Derek

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-view-breadcrumbs-1.0.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

django_view_breadcrumbs-1.0.0-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file django-view-breadcrumbs-1.0.0.tar.gz.

File metadata

  • Download URL: django-view-breadcrumbs-1.0.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.4

File hashes

Hashes for django-view-breadcrumbs-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6e1396d7aaa79786e7b83412dbd31aa3567b4652f8bb7725d74672e5ff51fae7
MD5 0573aba06ca587063c79618bc673645e
BLAKE2b-256 8c2bdd18fdfb18df0d0d995afbec501d3b1c7f3e4ad1e4df801f8eb798e74bdb

See more details on using hashes here.

File details

Details for the file django_view_breadcrumbs-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: django_view_breadcrumbs-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 14.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.4

File hashes

Hashes for django_view_breadcrumbs-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8fb3e602d815eb97c56bdbc4a2148003619bcd81ac52495841b9923bf01f8016
MD5 dbf1143eab43774ff13788d51358add2
BLAKE2b-256 01e1368f0565b4e593fc53e62409ded746e38342fd83f363e974af5d4252ad89

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page