Как построить таблицу объектов, не зная их атрибутов?
Я пытаюсь построить таблицу динамически в моем шаблоне django. Я получил имена столбцов в моем views.py, а также получил содержимое таблицы:
table = tenant_tables.models[table_name].objects.all()
headers = table.model._meta.get_fields(include_parents=True, include_hidden=False)
context = {'table': table, 'headers': headers}
return render(request, template_name=template_name, context=context)
На основе полученных данных я хочу построить таблицу с помощью шаблона, но я не знаю, как отсортировать все атрибуты объекта
<table
id="example"
class="table table-striped data-table"
style="width: 100%"
>
<thead>
<tr>
{% for header in headers %}
<th>{{header.verbose_name}}</th>>
{% endfor %}
</tr>
</thead>
<tbody>
{% for obj in table %}
<tr>
<td>{{obj}}</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
{% for header in headers %}
<th>{{header.verbose_name}}</th>>
{% endfor %}
</tr>
</tfoot>
</table>
Могу ли я реализовать это или мне следует создать представление для каждой модели в моем приложении?
Да, это возможно реализовать. Но сначала вам нужно реализовать пользовательский фильтр, который работает подобно функции getattr
в python.
Тогда вы можете сделать следующее:
...
<tbody>
{% for obj in table %}
<tr>
{% for header in headers %}
<td>{{ obj | getattr_filter:header }}</td>
{% endfor %}
<td>{{obj}}</td>
</tr>
{% endfor %}
</tbody>
...
Фильтр должен выглядеть примерно так:
@register.filter(name='getattr_filter')
def getattr_filter(obj, attribute):
return getattr(obj, attribute, None)
Посмотрите документы для получения более подробной информации о том, как реализовать пользовательский фильтр шаблонов.