如何在view.py中更改django-tables2表的列标题?

时间:2015-01-22 12:21:18

标签: python django view header django-tables2

我在我的Django项目中使用django-tables2,我想根据数据库查询动态更改某些列的标题,这是在view.py中完成的。

我知道在tables.py中可以更改" verbose_name"每列的属性,但我想分配一个模板变量" {{headerxy}}"例如,它会动态变化。

或者有没有办法改变" verbose_name" view.py?

中的属性

类似的东西:

table.columns['column1'].header = some_data

由于

2 个答案:

答案 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。