django_tables2表元行属性未显示

时间:2019-02-09 04:12:36

标签: python django django-tables2

我在我的项目中使用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属性,尽管就我阅读文档而言,据说声明了此属性在表的元类中就足够了。我是否误解了,或者我有什么想念的?任何帮助将不胜感激。

P.S。我正在使用Python 2.7,Django 1.8.17和django-tables2 v.1.16.0

1 个答案:

答案 0 :(得分:3)

Django表也使用了metaclasses来分解表类,这就是您在调试器中看到的这样的行:仅在启动时被击中的原因,因为表的类正在创建。

另一方面,当您自定义行属性时,django-tables2(根据设计)的名称是该行中当前数据的名称record

您可以阅读docs

  

默认情况下,为行提供类名奇数和偶数,可以使用row_attrs Table.Meta属性或作为Table的构造函数的参数对其进行自定义。只会添加类似字符串的值,将使用可选的关键字参数 record 调用可调用对象,并添加返回值。例如。