Skip to content

Commit 07dffbf

Browse files
committed
standardized/modernized view mixins
1 parent de91af7 commit 07dffbf

File tree

5 files changed

+48
-27
lines changed

5 files changed

+48
-27
lines changed

view_breadcrumbs/generic/create.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,17 @@ def __create_view_name(self):
2828
def create_view_url(self):
2929
return reverse(self.__create_view_name)
3030

31+
@property
32+
def create_view_label(self):
33+
if self.add_format_string:
34+
return self.add_format_string % {"model": self.model_name_title}
35+
return _("Add %(model)s") % {"model": self.model_name_title}
36+
3137
@property
3238
def crumbs(self):
3339
return super(CreateBreadcrumbMixin, self).crumbs + [
3440
(
35-
_(self.add_format_string % {"model": self.model_name_title}),
41+
self.create_view_label,
3642
self.create_view_url,
3743
),
3844
]

view_breadcrumbs/generic/delete.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
from django.urls import reverse
2+
from django.utils.encoding import force_str
3+
from django.utils.translation import gettext_lazy as _
24

35
from ..utils import action_view_name, classproperty
4-
from .list import ListBreadcrumbMixin
6+
from .detail import DetailBreadcrumbMixin
57

68

7-
class DeleteBreadcrumbMixin(ListBreadcrumbMixin):
9+
class DeleteBreadcrumbMixin(DetailBreadcrumbMixin):
10+
# Home / object List / object / Delete object
11+
delete_format_string = _("Delete %(instance)s")
12+
813
@classproperty
914
def delete_view_name(self):
1015
return action_view_name(
@@ -30,3 +35,17 @@ def delete_view_url(self, instance):
3035
self.__delete_view_name,
3136
kwargs={self.slug_url_kwarg: getattr(instance, self.slug_field)},
3237
)
38+
39+
def delete_view_label(self, instance):
40+
if self.delete_format_string:
41+
return self.delete_format_string % {'instance': force_str(instance)}
42+
return _("Delete %(instance)s") % {'instance': force_str(instance)}
43+
44+
@property
45+
def crumbs(self):
46+
return super(DeleteBreadcrumbMixin, self).crumbs + [
47+
(
48+
self.delete_view_label,
49+
self.delete_view_url,
50+
),
51+
]

view_breadcrumbs/generic/detail.py

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
1-
from functools import partial
2-
3-
from django.urls import reverse
41
from django.utils.encoding import force_str
5-
from django.utils.translation import gettext_lazy as _
62

73
from ..utils import action_view_name, classproperty
84
from .list import ListBreadcrumbMixin
95

106

11-
def _detail_view_label(instance, format_string):
12-
return _(force_str(format_string) % {"instance": force_str(instance)})
13-
14-
157
class DetailBreadcrumbMixin(ListBreadcrumbMixin):
168
# Home / object List / str(object)
17-
detail_format_string = _("%(instance)s")
9+
detail_format_string = "%s"
1810

1911
@classproperty
2012
def detail_view_name(self):
@@ -32,21 +24,18 @@ def __detail_view_name(self):
3224
)
3325

3426
def detail_view_url(self, instance):
35-
if self.breadcrumb_use_pk:
36-
return reverse(
37-
self.__detail_view_name, kwargs={self.pk_url_kwarg: instance.pk}
38-
)
39-
40-
return reverse(
41-
self.__detail_view_name,
42-
kwargs={self.slug_url_kwarg: getattr(instance, self.slug_field)},
43-
)
27+
return instance.get_absolute_url()
28+
29+
def detail_view_label(self, instance):
30+
if self.detail_format_string:
31+
return self.detail_format_string % force_str(instance)
32+
return force_str(instance)
4433

4534
@property
4635
def crumbs(self):
4736
return super(DetailBreadcrumbMixin, self).crumbs + [
4837
(
49-
partial(_detail_view_label, format_string=self.detail_format_string),
38+
self.detail_view_label,
5039
self.detail_view_url,
5140
),
5241
]

view_breadcrumbs/generic/list.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ def __list_view_name(self):
2626
def list_view_url(self):
2727
return reverse(self.__list_view_name)
2828

29+
@property
30+
def list_view_label(self):
31+
return self.model_name_title_plural
32+
2933
@property
3034
def crumbs(self):
31-
return [(self.model_name_title_plural, self.list_view_url)]
35+
return [(self.list_view_label, self.list_view_url)]

view_breadcrumbs/generic/update.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from functools import partial
2-
31
from django.urls import reverse
42
from django.utils.encoding import force_str
53
from django.utils.translation import gettext_lazy as _
@@ -14,7 +12,7 @@ def _update_view_label(instance, format_string):
1412

1513
class UpdateBreadcrumbMixin(DetailBreadcrumbMixin):
1614
# Home / object List / object / Update object
17-
update_format_str = _("Update: %(instance)s")
15+
update_format_string = _("Update %(instance)s")
1816

1917
@classproperty
2018
def update_view_name(self):
@@ -42,11 +40,16 @@ def update_view_url(self, instance):
4240
kwargs={self.slug_url_kwarg: getattr(instance, self.slug_field)},
4341
)
4442

43+
def update_view_label(self, instance):
44+
if self.update_format_string:
45+
return self.update_format_string % {'instance': force_str(instance)}
46+
return _("Update %(instance)s") % {'instance': force_str(instance)}
47+
4548
@property
4649
def crumbs(self):
4750
return super(UpdateBreadcrumbMixin, self).crumbs + [
4851
(
49-
partial(_update_view_label, format_string=self.update_format_str),
52+
self.update_view_label,
5053
self.update_view_url,
5154
),
5255
]

0 commit comments

Comments
 (0)