跳转到主要内容

Django通用视图面包屑

项目描述

django-view-breadcrumbs

Test Codacy Badge pre-commit.ci status Codacy Badge PyPI version

PyPI - Django Version PyPI - Python Version Downloads

All Contributors

目录

背景

此包提供了一组面包屑混合类,可以添加到任何基于Django的类视图,并且只需将{% render_breadcrumbs %}添加到基本模板即可。

breadcrumbs

base.html 模板中添加 render_breadcrumbs 标签,任何继承自基模板的模板都应该包含面包屑。

示例

my_app
   |--templates
            |--base.html
            |--create.html

base.html

{% load view_breadcrumbs %}

{% block breadcrumbs %}
    {% render_breadcrumbs %} {# Optionally provide a custom template e.g {% render_breadcrumbs "view_breadcrumbs/bootstrap5.html" %} #}
{% endblock %}

以及你的 create.html

{% extends "base.html" %}

安装

$ pip install django-view-breadcrumbs

view_breadcrumbs添加到您的INSTALLED_APPS

INSTALLED_APPS = [
    ...,
    "view_breadcrumbs",
    ...,
]

提供面包屑混合类。

  • BaseBreadcrumbMixin - 子类需要有一个 crumbs 类属性。
  • CreateBreadcrumbMixin - 用于创建视图 首页 / 文章 / 添加文章
  • DetailBreadcrumbMixin - 用于详情视图 首页 / 文章 / 文章 1
  • ListBreadcrumbMixin - 用于列表视图 首页 / 文章
  • UpdateBreadcrumbMixin - 用于更新视图 首页 / 文章 / 文章 1 / 更新文章 1
  • DeleteBreadcrumbMixin - 用于删除视图,此标签有一个链接到列表视图,用作成功URL。

设置

注意::warning

  • 请确保将 "django.template.context_processors.request" 添加到您的模板选项设置中。
TEMPLATES  = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request", # <- This context processor is required
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

使用以下方法修改默认值

名称 默认值 描述 选项
BREADCRUMBS_TEMPLATE "view_breadcrumbs/bootstrap5.html" 用于渲染面包屑的模板。 预定义模板
BREADCRUMBS_HOME_LABEL 首页 根路径的默认标签

自定义

BREADCRUMBS_TEMPLATE

网站范围
BREADCRUMBS_TEMPLATE = "my_app/breadcrumbs.html"
覆盖单个视图的面包屑模板

更新 base.html

{% render_breadcrumbs "my_app/breadcrumbs.html" %}

BREADCRUMBS_HOME_LABEL

网站范围
BREADCRUMBS_HOME_LABEL = "My new home"
覆盖特定视图的首页标签
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 new home")
     template_name = "demo/test-detail.html"

渲染

custom-root-breadcrumb

支持翻译

示例

translated-crumbs

用法

django-view-breadcrumbs 包含可以添加到基于类的视图中的通用混合类。

使用通用面包屑混合类,每个面包屑将动态地添加到视图中,并且可以通过提供 crumbs 属性来覆盖。

视图配置

注意::warning

  • 基于模型的视图应使用模式 view_name=model_verbose_name_{action}
动作 视图类 视图名称 示例面包屑 示例
列表 ListView {model.verbose_name}_list 首页 / 文章 文章示例
创建 CreateView {model.verbose_name}_create 首页 / 文章 / 添加文章
详情 DetailView {model.verbose_name}_detail 首页 / 文章 / 测试 - 文章
修改 UpdateView {model.verbose_name}_update 首页 / 文章 / 测试 - 文章 / 更新测试 - 文章
删除 DeleteView {model.verbose_name}_delete N/A
N/A TemplateView N/A N/A 参见:自定义视图
N/A FormView N/A N/A 参见:自定义视图
N/A AboutView N/A N/A 参见:自定义视图
N/A 视图 N/A N/A 参见:自定义视图

django-tables-2

动作 视图类 视图名称 示例面包屑 示例
N/A SingleTableMixin N/A N/A 参见:示例表格视图
N/A MultiTableMixin N/A N/A 参见:示例表格视图
N/A SingleTableView N/A N/A SingleTableMixin 的实现相同

有关更多示例,请参阅:示例应用

URL配置

基于上述动作表,需要遵守严格的 view_name 要求才能使面包屑正常工作。

您可以在 urls.py 中手动输入,或者可以选择使用以下类属性代替硬编码的 view_name

...
    path("tests/", TestListsView.as_view(), name=TestListsView.list_view_name),
    path(
        "tests/<slug:slug>/",
        TestDetailView.as_view(),
        name=TestDetailView.detail_view_name,
    ),
    path(
        "tests/<slug:slug>/update/",
        TestUpdateView.as_view(),
        name=TestUpdateView.update_view_name,
    ),
    path(
        "tests/<slug:slug>/delete/",
        TestDeleteView.as_view(),
        name=TestDeleteView.delete_view_name,
    ),
...

示例

示例面包屑:帖子

在您的 urls.py

  urlpatterns = [
      ...
      path("posts/", views.PostList.as_view(), name="post_list"),
      ...
      # OR
      ...
      path("posts/", views.PostList.as_view(), name=views.PostList.list_view_name),
      ...
  ]

所有面包屑都使用首页根路径 / 作为基础,可以通过指定 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

示例面包屑:首页 / 帖子 / 测试 - 帖子

在您的 urls.py

  urlpatterns = [
      ...
      path("posts/<slug:slug>/", views.PostDetail.as_view(), name="post_detail"),
      ...
      # OR
      ...
      path("posts/<slug:slug>/", views.PostDetail.as_view(), name=views.PostDetail.detail_view_name),
      ...
  ]

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"
    breadcrumb_use_pk = False

自定义面包屑:首页 / 我的测试面包屑

URL配置。

    urlpatterns = [
       path("my-custom-view/", views.CustomView.as_view(), name="custom_view"),
    ]

views.py

from django.urls import reverse
from django.views.generic import View
from view_breadcrumbs import BaseBreadcrumbMixin
from demo.models import TestModel


class CustomView(BaseBreadcrumbMixin, View):
    model = TestModel
    template_name = "app/test/custom.html"
    crumbs = [("My Test Breadcrumb", reverse("custom_view"))]  # OR reverse_lazy

或者

from django.urls import reverse
from django.views.generic import View
from view_breadcrumbs import BaseBreadcrumbMixin
from demo.models import TestModel
from django.utils.functional import cached_property


class CustomView(BaseBreadcrumbMixin, View):
    template_name = "app/test/custom.html"

    @cached_property
    def crumbs(self):
        return [("My Test Breadcrumb", reverse("custom_view"))]

参见示例应用以获取更多示例。

使用多个应用程序

要从不同的应用引用模型,您需要覆盖 app_name 类属性。

示例:使用从 custom 应用导入的 Library 模型,您希望在 demo 应用视图中渲染。

INSTALLED_APPS =  [
    ...
    "demo",
    "custom",
    ...
]

demo/views.py

class LibraryDetailView(DetailBreadcrumbMixin, DetailView):
    model = Library
    app_name = "demo"
    ...

本地运行

$ git clone git@github.com:tj-django/django-view-breadcrumbs.git
$ make install-dev
$ make migrate
$ make run

启动运行 demo 应用的 django 服务器。

访问 http://127.0.0.1:8090

致谢

要提交错误或补丁,请前往 django-view-breadcrumbs 在 github

如果您想表达额外的感激之情

star 支持我

Buy me a coffee

贡献者 ✨

感谢以下这些杰出的人们 (emoji 键)


Derek

📖

David THENON

💻

本项目遵循所有贡献者规范。欢迎任何形式的贡献!

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django-view-breadcrumbs-2.5.1.tar.gz (47.7 kB 查看哈希值)

上传时间 源代码

构建分发

django_view_breadcrumbs-2.5.1-py3-none-any.whl (25.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面