Django通用视图面包屑
项目描述
django-view-breadcrumbs
目录
背景
此包提供了一组面包屑混合类,可以添加到任何基于Django的类视图,并且只需将{% render_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"
渲染
支持翻译
示例
用法
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
支持我
贡献者 ✨
感谢以下这些杰出的人们 (emoji 键)
Derek 📖 |
David THENON 💻 |
本项目遵循所有贡献者规范。欢迎任何形式的贡献!
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
django-view-breadcrumbs-2.5.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b214c3758f6159d1ad8d76a21e7430a9f208be52fc79ba021e13a2ee675dbb3b |
|
MD5 | 12f024a8c1409ae6c716ad21931ae4ad |
|
BLAKE2b-256 | a79625123c58f6f4a5dc207f285a0c0ddaad106792b603bdd7687e2dedc39ea5 |
django_view_breadcrumbs-2.5.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0405af06d416c661edfea8d0b5023b37ec016edfb9ce8646c6b4a39127d48620 |
|
MD5 | 93ffc257283a05d8030c43d804526216 |
|
BLAKE2b-256 | 95c971dd2ed51e24a236b8267ddfa1ab2863647468f7a720aaa6151c336057a5 |