我在我的Django项目中使用django-tables2,我想根据数据库查询动态更改某些列的标题,这是在view.py中完成的。
我知道在tables.py中可以更改" verbose_name"每列的属性,但我想分配一个模板变量" {{headerxy}}"例如,它会动态变化。
或者有没有办法改变" verbose_name" view.py?
中的属性类似的东西:
table.columns['column1'].header = some_data
由于
答案 0 :(得分:3)
这里你需要做的是在初始化Table类时将列名作为参数传递,并在该类的__init__
范围内使用它。例如:
表类:
class SomeTable(tables.Table):
def __init__(self, *args, c1_name="",**kwargs): #will get the c1_name from where the the class will be called.
super().__init__(*args, **kwargs)
self.base_columns['column1'].verbose_name = c1_name
class Meta:
model = SomeModel
fields = ('column1')
查看:
class SomeView(View):
def get(self, request):
context = {
'table': SomeTable(SomeModel.objects.all(), c1_name='some name')
}
return render(request, 'table.html', {'context':context})
答案 1 :(得分:1)
这样做的一种方法是:
1)使用自定义模板
呈现表格{% render_table my_table "my_template.html" %}
2)创建html模板以显示自定义表格列,并仅在my_template.html
中扩展特定模板的块:
{% extends "django_tables2/table.html" %}
{% block table.thead %}
<thread>
<tr>
{% for column in table.columns %}
{% if my_condition == 2 %}
<th {{ column.attrs.th.as_html }}>{{ my_variable }}</th>
{% elif other_condition|length > 108 %}
<th {{ column.attrs.th.as_html }}><span class="red">{{ other_variable }}</span></th>
{% else %}
<th {{ column.attrs.th.as_html }}>{{ column.header }}</th>
{% endif %}
{% endfor %}
</tr>
</thread>
{% endblock table.thead %}
HTH。