diff --git a/wagtail/admin/views/generic/models.py b/wagtail/admin/views/generic/models.py index bf3168af0f..4a5494e90b 100644 --- a/wagtail/admin/views/generic/models.py +++ b/wagtail/admin/views/generic/models.py @@ -102,6 +102,7 @@ class IndexView( add_url_name = None add_item_label = gettext_lazy("Add") edit_url_name = None + inspect_url_name = None delete_url_name = None any_permission_required = ["add", "change", "delete"] search_fields = None @@ -364,6 +365,10 @@ class IndexView( if self.edit_url_name: return reverse(self.edit_url_name, args=(quote(instance.pk),)) + def get_inspect_url(self, instance): + if self.inspect_url_name: + return reverse(self.inspect_url_name, args=(quote(instance.pk),)) + def get_delete_url(self, instance): if self.delete_url_name: return reverse(self.delete_url_name, args=(quote(instance.pk),)) @@ -415,6 +420,20 @@ class IndexView( priority=10, ) ) + inspect_url = self.get_inspect_url(instance) + if inspect_url: + buttons.append( + ListingButton( + _("Inspect"), + url=inspect_url, + icon_name="info-circle", + attrs={ + "aria-label": _("Inspect '%(title)s'") + % {"title": str(instance)} + }, + priority=20, + ) + ) delete_url = self.get_delete_url(instance) can_delete = ( not self.permission_policy diff --git a/wagtail/admin/viewsets/model.py b/wagtail/admin/viewsets/model.py index d50bb93aa5..a80b6736aa 100644 --- a/wagtail/admin/viewsets/model.py +++ b/wagtail/admin/viewsets/model.py @@ -107,7 +107,7 @@ class ModelViewSet(ViewSet): return self.model_name def get_common_view_kwargs(self, **kwargs): - return super().get_common_view_kwargs( + view_kwargs = super().get_common_view_kwargs( **{ "model": self.model, "permission_policy": self.permission_policy, @@ -122,6 +122,9 @@ class ModelViewSet(ViewSet): **kwargs, } ) + if self.inspect_view_enabled: + view_kwargs["inspect_url_name"] = self.get_url_name("inspect") + return view_kwargs def get_index_view_kwargs(self, **kwargs): return {