【问题标题】:Django-tables2 - dynamically adding columns to table - not adding attrs to table tag in htmlDjango-tables2 - 动态地将列添加到表中 - 不在 html 中的表标记中添加 attrs
【发布时间】:2013-05-22 15:40:42
【问题描述】:

在我的 Django 项目中,我需要有哪些列是动态的并且取决于数据库中的内容的表。所以我在here 中找到了一个解决方案,它可以工作,但有一点问题。这是我动态扩展的表的类:

class ClientsTable(tables.Table):
    class Meta:
        model = Client
        attrs = {"class": "paleblue", "orderable":"True", "width":"100%"}
        fields = ('name',)

    def __init__(self, *args, **kwargs):
        super(ClientsTable, self).__init__(*args, **kwargs)
        self.counter = itertools.count()

    def render_row_number(self):
        return '%d' % next(self.counter)

    def render_id(self, value):
        return '%s' % value

这是扩展类的方法:

def define_table(roles):
    attrs = dict((r.name, tables.Column() for r in roles)
    klass = type('DynamicTable', (ClientsTable,), attrs)
    return klass

当我像这样在views.py 中创建表格时:

table = define_table(roles)(queryset)

表格显示了我想要的列,但在 html 代码中我看到它忽略了 attrs:

{"class": "paleblue", "orderable":"True", "width":"100%"}

所以淡蓝色没有 css 样式,这对我来说很重要。 我觉得它可能与 Meta 类有关,但字段和模型正在工作,所以我不知道为什么 attrs 没有。

【问题讨论】:

    标签: python django django-tables2


    【解决方案1】:

    对于现在正在寻找这个的任何人,从 django-tables2 1.10 开始,您可以通过将 extra_columns 传递给 Table 构造函数来动态地将列添加到表中。

    extra_columns 应该是一个元组列表,定义一个列名和一个Column 对象,例如。

    class MyTable(Table):
        static_column = Column()
    
    mytable = MyTable(extra_columns=[('dynamic_column', Column())]
    

    请参阅 API 文档:http://django-tables2.readthedocs.io/en/latest/pages/api-reference.html#django_tables2.tables.Table

    【讨论】:

      【解决方案2】:

      首先,meta options are not inherited 在 django-tables2 中。因此,您可以检查问题中讨论的解决方法以查看是否适合,或者您可以手动将 Meta 类添加到动态表中。为此,您可以像这样使用您的 define_table 方法:

      def 定义表(角色): attrs = dict((r.name, tables.Column() for r in roles) attrs['Meta'] = type('Meta', (), dict(attrs={"class":"paleblue", "orderable":"True", "width":"100%"}) ) 返回类

      哎呀,两年多后我注意到我的代码中有一个错误——我忘记在上面的return klass 之前包含klass = type('DynamicTable', (ClientsTable,), attrs) 行。为了完整起见,我现在添加它。

      【讨论】:

      • 好东西!不完全解决我的问题,但我可以修改你的 sn-p 来解决我的问题,并且学到了很多关于 Python type 和元类操作的知识。谢谢一堆!
      • 很高兴我能帮上忙!我还在我的博客上写了各种关于类型的文章:spapas.github.io/category/django.html
      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2019-12-13
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多