如何在 Django-tables2 中子类化 Column() 的示例

Example of how to Subclass Column() in Django-tables2

谁能给我指出一个如何在 django-tables2 中子类化基础 Column() 的示例。默认情况下,django-tables2 base Column() attrs 支持 'th'、'td'、'cell' 和 'a',详见 documentation,这也说明这可以是

extended by subclasses to allow arbitrary HTML attributes to be added to the output.

我想尝试做的是添加一个 'ul' 属性(以及随后的 'li' 属性),这样我就可以渲染单元格中的下拉菜单。我的想法是在 table 的每一行上都有一个选项按钮,通过 [=25] 为用户提供 'delete'、'copy'、'archive' 等各种选项=] 或 js 下拉菜单。

django-tables2 附带了一些自定义列,您可以在这里查看它们的实现:

https://github.com/jieter/django-tables2/tree/master/django_tables2/columns

JSONColumn 可能是一个很好的例子:

class JSONColumn(BaseLinkColumn):
    def __init__(self, json_dumps_kwargs=None, **kwargs):
        self.json_dumps_kwargs = (
            json_dumps_kwargs if json_dumps_kwargs is not None else {"indent": 2}
        )

        super(JSONColumn, self).__init__(**kwargs)

    def render(self, record, value):
        return format_html(
            "<pre {}>{}</pre>",
            AttributeDict(self.attrs.get("pre", {})).as_html(),
            json.dumps(value, **self.json_dumps_kwargs),
        )

该实现向列构造函数添加了一个参数,允许程序员更改传递给 json.dumps() 的参数。在它的 render() 方法中,它从 attrs-dict 中提取 <pre>-tag 的属性。这使用户能够执行

class MyTable(tables.Table):
    data = tables.JSONColumn(attrs={"pre": {"class": "json-data"}})

它将用于呈现这样的列:

<pre class="json-data">{
    "key": "value"
}</pre>

另请注意,如果您创建的列不是直接查看数据,you might want to set empty_values=()