[英]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.