请问有人可以举个例子,说明如何在django-tables2中将基础Column()子类化。默认情况下,django-tables2基本Column()attrs支持documentation中详细说明的'th','td','cell'和'a',该状态还指出可以是
由子类扩展,以允许添加任意HTML属性 到输出。
我想尝试做的事情可能是雄心勃勃的或是完全愚蠢和错误的,是添加一个'ul'属性(以及随后的'li'属性),以便我可以在单元格中呈现一个下拉菜单。我的想法是在表格的每一行上都有一个选项按钮,该选项按钮可通过css或js下拉菜单为用户提供“删除”,“复制”,“存档”等各种选项。
答案 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=()