Лучший подход к созданию фильтруемой таблицы с помощью Django
Я создал шаблон, в котором есть HTML-таблица и iframe, который отображает pdf-файлы, загруженные пользователем ранее:
Цель состоит в том, чтобы пользователь мог сопоставить записи в таблице с pdf / несколькими pdf. Эта часть уже выполнена.
Но теперь я хотел бы узнать, какой подход лучше всего подходит для фильтрации данных в моей таблице. Я создал таблицу следующим образом:
Если бы я построил таблицу полностью на JavaScript, то фильтрация не была бы проблемой, но я не думаю, что это правильный подход к Django?
Можно ли применить фильтр непосредственно к контекстным данным во фронтенде, возможно, с помощью JavaScript?
Я не хочу перезагружать данные каждый раз, когда кто-то вводит что-то в поле фильтра, так как я уже загрузил нужные данные и хочу избежать лишних запросов к базе данных.
Может ли кто-нибудь указать мне правильное направление, чтобы начать работу?
Спасибо!
Редактирование:
.
Я забыл упомянуть, что я предпочитаю не использовать предварительно собранные библиотеки Django, поскольку я все еще учусь и мне нужно довольно много настроек.
Edit2: Минимально воспроизводимый пример -> stack.html:
{% extends "website/base.html" %}
{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'evidence/css/style.css' %}">
<div class="container">
{% csrf_token %}
<div class="row">
<div class="col-8">
<div class="row">
<div class="col-12">
<table class="table">
<thead class="table-dark">
<tr>
<td>
mame
</td>
<td>
hash
</td>
<td>
something
</td>
</tr>
</thead>
<tbody>
{% for row in stack %}
<tr>
<td>
{{ row.name }}
</td>
<td>
{{ row.hash }}
</td>
<td>
{{ row.something }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
view:
def stack(request):
context = Stack.objects.all()
return render(request, "evidence/stack.html", {"stack": context})
URLs:
app_name = "evidence"
urlpatterns = [
...,
path('stact', stack, name='stack'),
]
Модель:
class Stack(models.Model):
name = models.CharField(max_length=150)
hash = models.CharField(max_length=150)
something = models.CharField(max_length=150)
Вы можете сделать фильтрацию только через JS, но если вы включите пагинацию, то вам придется делать фильтрацию через запросы к базе данных бэкенда. а правильный способ - сделать правильную фильтрацию и пагинацию через бэкенд. вы можете просто добавить кнопку для фильтрации, а не фильтровать при вводе мгновенно.