Лучший подход к созданию фильтруемой таблицы с помощью Django

Я создал шаблон, в котором у вас есть HTML-таблица и iframe, отображающий PDF-файлы, ранее загруженные пользователем:

Цель состоит в том, чтобы пользователь мог сопоставить записи таблицы с PDF-файлом или несколькими PDF-файлами. Эта часть сделана.

Но теперь я хотел бы знать, как лучше всего фильтровать данные моей таблицы. Я создал таблицу следующим образом:

{% extends "website/base.html" %}
{% block content %}
{% load static %}
{% load evidence_extras %}
<script src = "{% static 'evidence/matching_final.js' %}"></script>
<link rel = "stylesheet" type = "text/css" href = "{% static 'evidence/css/style.css' %}">
<script src='https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.8/axios.js'></script>

<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">
                            <td>
                                id
                            </td>
                            .......
                        </thead>
                        <tbody>
                            {% for piece in transactions %}
                            <tr onclick = "handleRowClick(this, {{piece.id}})">
                                <td>
                                    {{ piece.id }}
                                </td>
                                ......
                            </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
            <div class = "row">
                <div class = "col-12">
                    <button onclick = "handleMatch(this)" class = "btn btn-primary" style = "width: 100%;">Match</button>
                </div>
            </div>
        </div>
        <div class = "col-4 overflow-scroll" style = "height: 60em;">
            {% for evidence in evidences %}
            <div class = "row">
                <div class = "col-12">
                    <div class = "card" id = "evidence_{{evidence.id}}">
                        <div class = "card-header">{{ evidence.name}}</div>
                        <div class = "card-body">
                            <iframe src = "/evidence/pdf/{{evidence.id}}" id = "pdf_frame" width = "100%"
                                height = "400"></iframe>
                            <ul>
                                <li maxlength = "20"> file: {{evidence.file}} </li>
                                <li maxlength = "20"> hash: {{evidence.hash}} </li>
                            </ul>
                            <div class = "row">
                                <div class = "col-6">
                                    <button onclick = "handleMarkClick(this, {{evidence.id}})" class = "btn btn-primary"
                                        style = "width: 100%;">mark</button>
                                </div>
                                <div class = "col-6">
                                    <button onclick = "handleExpandClick(this,{{evidence.id}})" class = "btn btn-primary"
                                        style = "width: 100%;">show</button>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
            </div>
            {% endfor %}
        </div>
    </div>


</div>
{% endblock %}

Если бы я полностью построил таблицу с помощью JavaScript, фильтрация не была бы проблемой, но я не думаю, что это будет правильный подход для Django?
Можно ли применить фильтр непосредственно к контекстным данным во внешнем интерфейсе, возможно, с помощью JavaScript?
Я не хочу перезагружать данные каждый раз, когда кто-то что-то вводит в поле фильтра, поскольку я уже загрузил необходимые данные и хочу избежать ненужных запросов к базе данных. Может ли кто-нибудь указать мне правильное направление?
Спасибо!

Редактировать:
Я забыл упомянуть, что предпочитаю не использовать готовые библиотеки Django, поскольку я все еще учусь и мне нужно немного настроить.

Редактировать2: Минимальный воспроизводимый пример -> стек.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 %}

вид:

def stack(request):
    context = Stack.objects.all()
    return render(request, "evidence/stack.html", {"stack": context})

URL-адреса:

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)

Поделитесь минимальным воспроизводимым примером вашей текущей настройки.

Chukwujiobi Canon 23.05.2024 05:20

@ChukwujiobiCanon это не что иное, как таблица HTML. Но я могу добавить жестко запрограммированную таблицу, если это поможет.

user3793935 23.05.2024 05:33

@ChukwujiobiCanon добавил простую таблицу

user3793935 23.05.2024 05:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете выполнять фильтрацию только через JS, но если вы включите нумерацию страниц, вам придется выполнять фильтрацию на протяжении всего запроса к серверной базе данных. и правильный способ — обеспечить правильную фильтрацию и нумерацию страниц через бэкэнд. вы можете просто добавить кнопку для фильтрации информации, а не мгновенной фильтрации при вводе текста.

Привет, одновременно никогда не будет более 30-50 записей в таблицах и нескольких PDF-файлов, поэтому нумерации страниц не будет. Является ли в этом случае плохим подходом игнорировать механизм шаблонов Django и строить таблицу напрямую через js? Мой подход заключался бы в том, чтобы установить данные контекста в тег скрипта, получить данные оттуда и построить исходную таблицу/фильтрацию таким образом. Я думаю, кнопка фильтра тоже подойдет. Я новичок в Django, поэтому не слишком много знаю о лучших подходах.

user3793935 23.05.2024 07:40

Лучший подход — тот, который я обсуждал выше, но вы можете избежать его и использовать JS только в том случае, если имеется только 30-50 записей. У меня было приложение, в котором клиент изначально думал, что записей будет мало, поэтому нет необходимости добавлять нумерацию страниц. И одно это решение не включать нумерацию страниц разрушило все его приложение, когда количество клиентов увеличилось, что сделало его очень медленным. и в конце это нужно было переделывать (нумерацию страниц с фильтрацией всего этого). так что выбирайте с умом.

Muhammad Waqar Anwar 23.05.2024 07:45

О, ладно, это хороший момент. Думаю, я воспользуюсь вашим подходом, просто на всякий случай. Большое спасибо

user3793935 23.05.2024 08:05

@user3793935 user3793935 вообще нет проблем

Muhammad Waqar Anwar 23.05.2024 08:08

Другие вопросы по теме