Add a BaseColumn class for things that don't have a meaningful 'value' to put in the context

pull/10592/head
Matt Westcott 2023-06-22 18:39:05 +01:00 zatwierdzone przez Sage Abdullah
rodzic bdce0a0388
commit fbfe8fe75f
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
2 zmienionych plików z 30 dodań i 22 usunięć

Wyświetl plik

@ -15,7 +15,7 @@ from wagtail.admin.ui.components import Component
from wagtail.coreutils import multigetattr
class Column(metaclass=MediaDefiningClass):
class BaseColumn(metaclass=MediaDefiningClass):
class Header:
# Helper object used for rendering column headers in templates -
# behaves as a component (i.e. it has a render_html method) but delegates rendering
@ -38,7 +38,7 @@ class Column(metaclass=MediaDefiningClass):
return self.column.render_cell_html(self.instance, parent_context)
header_template_name = "wagtailadmin/tables/column_header.html"
cell_template_name = "wagtailadmin/tables/cell.html"
cell_template_name = None
def __init__(
self, name, label=None, accessor=None, classname=None, sort_key=None, width=None
@ -74,6 +74,10 @@ class Column(metaclass=MediaDefiningClass):
@cached_property
def cell_template(self):
if self.cell_template_name is None:
raise NotImplementedError(
"cell_template_name must be specified on %r" % self
)
return get_template(self.cell_template_name)
def render_header_html(self, parent_context):
@ -83,16 +87,6 @@ class Column(metaclass=MediaDefiningClass):
context = self.get_header_context_data(parent_context)
return self.header_template.render(context)
def get_value(self, instance):
"""
Given an instance (i.e. any object containing data), extract the field of data to be
displayed in a cell of this column
"""
if callable(self.accessor):
return self.accessor(instance)
else:
return multigetattr(instance, self.accessor)
def get_cell_context_data(self, instance, parent_context):
"""
Compiles the context dictionary to pass to the cell template when rendering a table cell for
@ -101,7 +95,6 @@ class Column(metaclass=MediaDefiningClass):
return {
"instance": instance,
"column": self,
"value": self.get_value(instance),
"request": parent_context.get("request"),
}
@ -127,6 +120,27 @@ class Column(metaclass=MediaDefiningClass):
)
class Column(BaseColumn):
"""A column that displays a single field of data from the model"""
cell_template_name = "wagtailadmin/tables/cell.html"
def get_value(self, instance):
"""
Given an instance (i.e. any object containing data), extract the field of data to be
displayed in a cell of this column
"""
if callable(self.accessor):
return self.accessor(instance)
else:
return multigetattr(instance, self.accessor)
def get_cell_context_data(self, instance, parent_context):
context = super().get_cell_context_data(instance, parent_context)
context["value"] = self.get_value(instance)
return context
class TitleColumn(Column):
"""A column where data is styled as a title and wrapped in a link or <label>"""

Wyświetl plik

@ -6,18 +6,15 @@ from django.http import Http404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from wagtail.admin.ui.tables import Column, DateColumn
from wagtail.admin.ui.tables import BaseColumn, Column, DateColumn
from wagtail.admin.views import generic
from wagtail.admin.views.generic.base import BaseListingView
from wagtail.models import Page
class PageTitleColumn(Column):
class PageTitleColumn(BaseColumn):
cell_template_name = "wagtailadmin/pages/listing/_page_title_cell.html"
def get_value(self, instance):
return None
def get_cell_context_data(self, instance, parent_context):
context = super().get_cell_context_data(instance, parent_context)
context["page_perms"] = instance.permissions_for_user(
@ -33,12 +30,9 @@ class ParentPageColumn(Column):
return instance.get_parent()
class PageStatusColumn(Column):
class PageStatusColumn(BaseColumn):
cell_template_name = "wagtailadmin/pages/listing/_page_status_cell.html"
def get_value(self, instance):
return None
class ContentTypeUseView(BaseListingView):
template_name = "wagtailadmin/pages/content_type_use.html"