Следует ли использовать ответ django render_to_string во innerHTML? - PullRequest
0 голосов
/ 26 апреля 2019

Позвольте мне начать с того, что это мой первый проект Django, поэтому подумайте о том, что я делаю что-то в корне неправильно.

Я работаю над веб-страницей, на которой отчет будет отображаться в виде таблицы HTML.Я думаю, что процесс, который я использую для получения данных и построения таблицы, слишком сложен.Это работает, но я думаю, что, возможно, есть лучший способ.Любые предложения приветствуются.

На данный момент у меня есть проект Django, который состоит из одной веб-страницы и базовой инфраструктуры Django.На этой странице пользователю предоставляются некоторые возможности для управления отчетом и кнопка для запуска создания отчета.

Когда инициируется создание отчета, отправляется запрос XMLHTTPRequest на URL, который перенаправляется (через Django) в представление.,Это представление вызывает API для извлечения данных и выполняет некоторую обработку данных в Python.Затем он вызывает функцию render_to_string с данными и шаблоном, который использует django_tables2 для визуализации таблицы.Он возвращает ответ render_to_string (обернутый в HttpResponse) на веб-страницу отчета.

Веб-страница отчета устанавливает для таблиц innerHTML значение responseText XMLHTTPRequest.

Ниже приведен поток в более кратком изложении.версия:

  1. Пользователь нажимает кнопку «Создать отчет»
  2. На странице отчета создается запрос XMLHTTPRequest, который перенаправляется в представление.
  3. Просмотр загружает данные из API, делает некоторыеумеренно сложная обработка этого в Python и рендеринг его в строку с использованием вызова render_to_string и django_tables2.
  4. Представление возвращает ответ render_from_data (таблица HTML).
  5. Наборы веб-страниц отчетаinnerHTML таблицы = ответный текст XMLHTTPRequest.

Это кажется мне запутанным, но это самый простой способ, который я нашел для генерации таблицы.Данные, возвращаемые из API, должны быть реструктурированы, прежде чем они пригодны для отчета.Это проще сделать в Python, поэтому для реструктуризации используется представление.

Заранее спасибо.

Шаблон Django, который генерирует таблицу html:

{% load render_table from django_tables2 %}
{% render_table report_details %}

HTML-код, который загружает URL для получения таблицы HTML:

    <div><table id=report visibility="none"></table></div>
    <body>
        <script>

                function load_table ()
                {
                        var xhttp = new XMLHttpRequest();
                        xhttp.onreadystatechange = function()
                        {
                                if (this.readyState == 4 && this.status == 200)
                                {
                                        table_element = document.getElementById ("report");
                                        table_element.innerHTML = this.responseText;
                                        table_element.style.visibility = "visible";
                                }
                        };
                        xhttp.open("GET", "http://host:8000/reports/get_report_table", true);
                        xhttp.send();
                }

1 Ответ

0 голосов
/ 29 апреля 2019

Я думаю, что нашел лучший способ сделать это.

Шаблон рендеринга таблицы находится внутри блока "% if%".Этот блок «% if%» выполняется только при наличии данных отчета.

{% if generate_report %}
{% render_table report_details %}
{% endif %}

Когда оператор нажимает кнопку «Создать отчет», код устанавливает некоторые параметры (в основном фильтры отчетов) и выполняет:

window.location.search = date_filter + "&" + filter + "generate_report=true";   

Маршрут / представление URL для исходной страницы отчета позволяет получать и форматировать данные отчета, если для параметра «generate_report» задано значение true.

Это устраняет необходимость:

  1. XMLHTTPRequest для получения данных отчета.
  2. URL-маршрут для маршрутизации вызова для получения данных таблицы.
  3. Второе «представление» для построения данных таблицы.
  4. Установка значения innerHTML.

Я уверен, что есть возможности для улучшения.Любые предложения приветствуются.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...