簡體   English   中英

django-tables2:為許多列設置屬性?

[英]django-tables2: set attrs for many columns?

我有一個帶有許多列的django-tables2表。 因此,我不想單獨指定Table類中的每一列,而只是相應地設置Model。

現在,我想更改一些可以通過名稱來標識的列的屬性。 我想做類似的事情:

table = MyTable(my_queryset)

for col in table.columns.items():
    col_name = col[0]
    if col_name.endswith('some_suffix'):
        table.columns[col_name].attrs['td'].update({'align': 'right'})

...應該更改所有名稱以'some_suffix'結尾的列,以使值正確對齊。

但是,問題似乎出在table.columns[col_name]是一個BoundColumn其屬性顯然無法更改。

有誰知道快速解決此問題的方法(“使選定的列正確對齊”)?

謝謝菲利普

我發現最好的方法是動態創建表(即使用pythons type創建Table類並設置其字段)。 我在本文中描述了這種技術(以解決另一個問題): http : //spapas.github.io/2015/10/05/django-dynamic-tables-similar-models/

我在那篇文章中建議的是創建一個get_table_class方法,該方法將創建Table子類。 在您的情況下,可能是這樣的:

def get_table_class(model):
      def get_table_column(field):
          if field.name.endswith('some_suffix'):
              return tables.Column(attrs={"td": {"align": "right"}})
          else:
              return tables.Column()

      attrs = dict(
          (f.name, get_table_column(f)) for
          f in model._meta.fields if not f.name == 'id'
      )
      attrs['Meta'] = type('Meta', (), {'attrs':{"class":"table"}, "order_by": ("-created_on", ) } )
      klass = type('DTable', (tables.Table, ), attrs)

      return klass

上面的attrs = dict(...)行創建了一個字典,其中包含您作為鍵傳遞給模型的所有字段名稱(id字段除外)和相應的Table列(使用后綴檢查通過get_table_column對齊它們)作為價值。 attrs['Meta'] = ...行向此字典添加一個Meta (如您所見,不再需要model屬性),最后klass = type...行使用上述字典創建Table子類!

我有一個類似的問題,無法更改綁定列的屬性。 這個問題似乎是SO唯一解決這個問題的問題。

除了table.columns之外,還有一個屬性table.base_columns 在第二列中,列尚未綁定。 所以這是我的方法:

import django_tables2 as tables

class YourTable(tables.Table)
    # define your columns

    # overload the init method
    def __init__(self, *args, **kwargs):
        for col in self.base_columns:
            if col[0].endswith('some_suffix'):
                col[1].attrs['td'].update({'align': 'right'})
        # very important! call the parent method
        super(YourTable, self).__init__(*args, **kwargs)

現在將保存更改,因為它們是在綁定之前在基本列中進行的。 調用父方法-重載__init__方法-綁定它們,並且更改在模板中可見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM