Пример того, как создать подкласс Column () в Django-tables2 - PullRequest
0 голосов
/ 29 декабря 2018

Может кто-нибудь указать мне на пример того, как создать подкласс базового Column () в django-tables2, пожалуйста.По умолчанию базовые атрибуты Column () django-tables2 поддерживают 'th', 'td', 'cell' и 'a', как описано в документации , в которой также указано, что это может быть

расширенный подклассами, чтобы разрешить добавление произвольных атрибутов HTML к выводу.

То, что я хочу попробовать, что может быть либо амбициозным, либо глупым и неправильным, этодобавить атрибут 'ul' (и впоследствии атрибуты 'li'), чтобы я мог отобразить выпадающее меню в ячейке.Я думаю, что в каждой строке таблицы есть кнопка опций, которая предоставляет пользователю различные опции «удалить», «копировать», «архивировать» и т. Д. Через выпадающее меню css или js.

1 Ответ

0 голосов
/ 29 декабря 2018

django-tables2 поставляется с некоторыми пользовательскими столбцами, вы можете посмотреть их реализацию здесь:

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

JSONColumn может бытьхороший пример:

<code>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 {}>{}
", AttributeDict (self.attrs.get (" pre ", {})). as_html (), json.dumps (значение, ** self.json_dumps_kwargs),)

Реализация добавляет один аргумент в конструктор столбцов, что позволяет программисту изменять передаваемые параметры на json.dumps(). В своем методе render() он извлекает атрибуты для тега <pre> из attrs -dict. Это позволяет пользователю делать

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

, который будет использоваться для визуализации столбца следующим образом:

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

Также обратите внимание, что если вашсоздайте столбец, который не просматривает данные напрямую, вы можете установить empty_values=()

...