Я изо всех сил пытаюсь показать разбитую на страницы таблицу, как это сделала страница администрирования Django, но пока безуспешно.
Цель состоит в том, чтобы разбить таблицу на страницы, чтобы уменьшить количество строк в представлении, и отобразить данные в каждой строке. Хотя шаблон HTML будет обслуживать более одной таблицы, указывать имя поля для указанной модели c не очень удобно.
Вот представление:
def my_view(request):
model_list = Model.objects.all()
field_names = [f.name for f in Model._meta.get_fields()][1:] # drop the id
# object_values = []
# for object in model_list:
# object_values.append([])
# for field in field_names:
# object_values[-1].append(getattr(object, field))
paginator = Paginator(model_list, 10)
page = request.GET.get('page', 1)
try:
data = paginator.page(page)
except PageNotAnInteger:
data = paginator.page(1)
except EmptyPage:
data = paginator.page(paginator.num_pages)
return render(request, 'my_folder/my_view.html',
{'paginator': paginator, 'filter': model_list, 'table': data, 'field_names': field_names})
Вот мой HTML шаблон:
<table>
<thead>
<tr>
<th class="action-checkbox">
<div>
<span>
<input type="checkbox">
</span>
</div>
</th>
{% for header in field_names %}
<th class="sortable-column-name">{{header}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for rowval in table %}
<tr>
<th class="action-checkbox">
<div>
<span>
<input type="checkbox">
</span>
</div>
</th>
{% for val in rowval %}
{% if forloop.counter == 2 %}
<th>{{val}}</th>
{% else %}
<td>{{val}}</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
В этом коде есть ошибка, обозначающая, что 'Model': object is not iterable
. Как мне перебрать страницу или объект модели?
Я пробовал разные способы, без разбивки на страницы, закомментированные части кода в представлении заставляют его работать. Однако я хочу разбить данные в таблице на страницы, так как в табличном представлении будет много строк.