代码之家  ›  专栏  ›  技术社区  ›  cander

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

  •  1
  • cander  · 技术社区  · 6 年前

    请给我举个例子,说明如何在django-tables2中对基列()进行子类化。默认情况下,django-tables2 base column()attrs支持'th'、'td'、'cell'和'a',如 documentation ,这也说明

    通过子类扩展以允许添加任意HTML属性 输出。

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jieter    6 年前

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

    该实现将一个参数添加到columns构造函数中,该构造函数允许程序员更改传递给 json.dumps() . 在其 render() 方法,它提取 <pre> -来自 attrs -这使用户能够

    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=()