django_tables2 Table 不显示元行属性
django_tables2 Table Meta row attributes are not displayed
我在我的项目中使用 django_tables2
库并尝试实现一个 table,其中每一行都将拥有一个 data-item-name
属性。我的特定 table 继承自我的 BaseTable
class,后者又继承自 django_tables2.Table
class。这是代码:
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)
尽管 table 呈现时没有错误并且没有任何中断,但 table 中没有任何 data-item-name
属性不在一行中,尽管据我所知通过文档,据说在 table 的元 class 中声明此 属性 就足够了。我错了还是我错过了什么?任何帮助将不胜感激。
P.S。我正在使用 Python 2.7、Django 1.8.17 和 django-tables2 v.1.16.0
Django tables 使用(和 Django 一样)metaclasses 分解 table classes 这就是你在调试器中看到这些行的原因仅在启动时被击中,因为这是为您的 table 创建 class 的时候。
另一方面,当您自定义行属性时,django-tables2(按设计)为行中的当前数据命名为 record
。
您可以阅读 docs:
By default, class names odd and even are supplied to the rows, which can be customized using the row_attrs Table.Meta attribute or as argument to the constructor of Table. String-like values will just be added, callables will be called with optional keyword argument record, the return value will be added. For example.
我在我的项目中使用 django_tables2
库并尝试实现一个 table,其中每一行都将拥有一个 data-item-name
属性。我的特定 table 继承自我的 BaseTable
class,后者又继承自 django_tables2.Table
class。这是代码:
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)
尽管 table 呈现时没有错误并且没有任何中断,但 table 中没有任何 data-item-name
属性不在一行中,尽管据我所知通过文档,据说在 table 的元 class 中声明此 属性 就足够了。我错了还是我错过了什么?任何帮助将不胜感激。
P.S。我正在使用 Python 2.7、Django 1.8.17 和 django-tables2 v.1.16.0
Django tables 使用(和 Django 一样)metaclasses 分解 table classes 这就是你在调试器中看到这些行的原因仅在启动时被击中,因为这是为您的 table 创建 class 的时候。
另一方面,当您自定义行属性时,django-tables2(按设计)为行中的当前数据命名为 record
。
您可以阅读 docs:
By default, class names odd and even are supplied to the rows, which can be customized using the row_attrs Table.Meta attribute or as argument to the constructor of Table. String-like values will just be added, callables will be called with optional keyword argument record, the return value will be added. For example.