Добавление строк и столбцов в таблицу HTML с помощью Django
У меня возникла проблема. Рассмотрим таблицу HTML, в ней есть строки и столбцы. Я хочу добавить новую строку или столбец, когда мне это нужно, и я хочу, чтобы это была запись в базе данных. И я хочу сделать это с помощью django. Что мне делать? Я думаю, что мне нужно использовать django_table2, но я не знаю как. Я буду рад, если вы напишите пример кода. Спасибо)
Допустим, у вас есть модель, вы можете получить список объектов следующим образом;
def my_view(request):
context = {'object_list':MyModel.objects.all()}
return render(request, 'mypage.html', context)
Затем в шаблоне вы можете сделать несколько вещей для создания таблиц: Либо полностью сгенерировать таблицу с помощью Django, например так:
{% for object in object_list %}
<tr>
<td>{{object.data}}</td>
<td>{{object.data}}</td>
<td>{{object.data}}</td>
</tr>
{% endfor %}
Это создаст новую строку для каждого объекта.
Другим решением является:
{% for object in object_list %}
//Create row for every object
<tr>
{% for data in object.get_field_data %}
// Create column for every field in object
<td>{{data}}</td>
{% endfor %}
</tr>
{% endfor %}
Где get_field_data
будет определен как метод на модели, как например:
def get_field_data(self):
datalist = []
for field in self._meta.get_fields():
datalist.append(getattr(self, field.name))
return datalist
Вы можете даже реализовать некоторые проверки на get_field_data
, например, исключить поля.
def get_field_data(self):
datalist = []
for field in self._meta.get_fields():
if field.name != 'id':
datalist.append(getattr(self, field.name))
return datalist
Вам не нужно использовать какой-либо внешний пакет, вы можете легко сделать это с помощью Django Template Language
Вот пример кода, использующего ListView
# views.py
from django.views.generic import ListView
class ItemListView(ListView):
template_name = 'mytable.html'
model = MyModel
context_object_name = 'item_list'
<!-- mytable.html -->
...
<table>
<thead>
<tr>
<th>Name</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
{% for item in item_list %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.amount }}</td>
</tr>
{% endfor %}
</tbody>
</table>
...
Таким образом, ваш шаблон будет иметь доступ к списку объектов item_list
, который в точности соответствует записям в таблице базы данных. Вы можете циклически обращаться к этому списку/набору с помощью цикла for, который автоматически обернет содержимое в html, необходимый для того, чтобы сделать его частью таблицы.