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

时间:2018-12-29 13:04:04

标签: django django-tables2

请问有人可以举个例子,说明如何在django-tables2中将基础Column()子类化。默认情况下,django-tables2基本Column()attrs支持documentation中详细说明的'th','td','cell'和'a',该状态还指出可以是

  

由子类扩展,以允许添加任意HTML属性   到输出。

我想尝试做的事情可能是雄心勃勃的或是完全愚蠢和错误的,是添加一个'ul'属性(以及随后的'li'属性),以便我可以在单元格中呈现一个下拉菜单。我的想法是在表格的每一行上都有一个选项按钮,该选项按钮可通过css或js下拉菜单为用户提供“删除”,“复制”,“存档”等各种选项。

1 个答案:

答案 0 :(得分:0)

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),
        )

该实现向column构造函数添加了一个参数,这使程序员可以更改传递给json.dumps()的参数。在其render()方法中,它从<pre>-dict中提取attrs-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=()