How to change the column header of a django-tables2 table in the view.py?

霸气de小男生 提交于 2020-01-25 03:11:26

问题


I'm using django-tables2 in my Django project and I would like to change dynamically the header of some columns according to a database query, which is done in view.py.

I know that in tables.py one can change the "verbose_name" attribute of each and every column but I would like to assign a template variable "{{ headerxy }}" for example so that it changes dynamically.

Or is there a way to change the "verbose_name" attribute in the view.py ?

Something like:

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

Thanks


回答1:


Here what you have to do is to pass the column name as parameter when initialising the Table class and use it within __init__ scope of that class. For example:

Table Class:

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')

View:

class SomeView(View):
  def get(self, request):
    context = {
      'table': SomeTable(SomeModel.objects.all(), c1_name='some name')
    }
    return render(request, 'table.html', {'context':context})



回答2:


One way of doing it would be:

1) render the table with custom template

{% render_table my_table "my_template.html" %}

2) create html template to display your custom table columns, and only extending specific template's block, in 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.



来源:https://stackoverflow.com/questions/28088655/how-to-change-the-column-header-of-a-django-tables2-table-in-the-view-py

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!