django_tables2 Атрибуты строки мета таблицы не отображаются - PullRequest
0 голосов
/ 09 февраля 2019

Я использую библиотеку django_tables2 в своем проекте и пытаюсь реализовать таблицу, в которой каждая строка будет иметь атрибут data-item-name.Моя конкретная таблица наследуется от моего BaseTable класса, который, в свою очередь, наследуется от django_tables2.Table класса.Вот код:

page_table.py

import django_tables2 as tables

from django.utils.html import format_html

from myapp.utils.base_table import BaseTable
from myapp.models import MyModel

class PageTable(BaseTable):
    item_id = tables.Column(accessor='pk')

    # This method works perfectly fine as expected
    def render_item_name(self, record):
        return format_html(
            '<span data-item-id="{0}">{1}</span>'.format(
                record.item_id,
                record.item_name
            )
        )

    class Meta:
        model = MyModel
        # When debugging this attribute is accessed only on booting up
        # And is ignored when I for example first visit or refresh the page
        row_attrs={
            'data-item-name': lambda r: r.item_name
        }
        fields = (
            'item_id',
            'item_name',
            'item_description',
            'item_price', # etc
        )

base_table.py

from django_tables2 import Table

class BaseTable(Table):
    def __init__(self, *args, **kwargs):
        super(BaseTable, self).__init__(*args, **kwargs)

Хотя таблицарендерится без ошибок и ничего не разбивается, нет атрибута data-item-name ни в одной строке таблицы, хотя, поскольку я просматривал документы, говорят, что объявления этого свойства в метаклассе таблицы достаточно.Я ошибаюсь или я что-то упустил в этом?Любая помощь будет принята с благодарностью.

PS Я использую Python 2.7, Django 1.8.17 и django-tables2 v. 1.16.0

1 Ответ

0 голосов
/ 09 февраля 2019

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

С другой стороны, django-tables2 (по дизайну) имеет имя record для текущих данных в строке при настройке атрибутов строки.

Вы можете прочитать в документах :

По умолчанию имена классов нечетные и четные передаются в строки, которые можно настроить с помощью атрибута row_attrs Table.Metaили в качестве аргумента для конструктора таблицы.Просто будут добавлены строковые значения, вызовы будут вызываться с необязательным ключевым аргументом record , возвращаемое значение будет добавлено.Например.

...