Позвольте мне начать с того, что это мой первый проект Django, поэтому подумайте о том, что я делаю что-то в корне неправильно.
Я работаю над веб-страницей, на которой отчет будет отображаться в виде таблицы HTML.Я думаю, что процесс, который я использую для получения данных и построения таблицы, слишком сложен.Это работает, но я думаю, что, возможно, есть лучший способ.Любые предложения приветствуются.
На данный момент у меня есть проект Django, который состоит из одной веб-страницы и базовой инфраструктуры Django.На этой странице пользователю предоставляются некоторые возможности для управления отчетом и кнопка для запуска создания отчета.
Когда инициируется создание отчета, отправляется запрос XMLHTTPRequest на URL, который перенаправляется (через Django) в представление.,Это представление вызывает API для извлечения данных и выполняет некоторую обработку данных в Python.Затем он вызывает функцию render_to_string с данными и шаблоном, который использует django_tables2 для визуализации таблицы.Он возвращает ответ render_to_string (обернутый в HttpResponse) на веб-страницу отчета.
Веб-страница отчета устанавливает для таблиц innerHTML значение responseText XMLHTTPRequest.
Ниже приведен поток в более кратком изложении.версия:
- Пользователь нажимает кнопку «Создать отчет»
- На странице отчета создается запрос XMLHTTPRequest, который перенаправляется в представление.
- Просмотр загружает данные из API, делает некоторыеумеренно сложная обработка этого в Python и рендеринг его в строку с использованием вызова render_to_string и django_tables2.
- Представление возвращает ответ render_from_data (таблица HTML).
- Наборы веб-страниц отчета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();
}