#javascript #python #json #ajax #datatable
Вопрос:
Я новый разработчик, и это мой первый профессиональный проект, а также первый в Django. Я пытаюсь загрузить данные, которые я извлек из своих моделей.пай в моем view.py к датируемому. Вот мой код.
Вот мой views.py
def recordingDataTable(request):
if request.is_ajax and request.method == "GET":
vicidial_agent_log = VicidialAgentLog.objects.filter(event_time__gte='2021-04-16 16:00:00').values('user', 'server_ip')
structure = json.dumps(list(vicidial_agent_log), cls=DjangoJSONEncoder)
return JsonResponse(structure, status = 200, safe=False)
return JsonResponse({}, status = 400)
Вот JSON, который возвращается
"[{"user": "8045", "server_ip": "168.119.48.158"}, {"user": "8047", "server_ip": "168.119.48.158"},]"
Вот мой шаблон
<table id="recording_datatable" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>Username</th>
<th>Server IP</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<th>Username</th>
<th>Server IP</th>
</tr>
</tfoot>
</table>
Наконец, вот мой сценарий
$(document).ready(function() {
$.ajax({
'url': "{% url 'recordings:recordingDataTable' %}",
'method': "GET",
'dataType': "JSON",
'contentType': 'application/json',
}).done( function(data) {
alert(data);
$('#recording_datatable').DataTable({
data: data,
dataSrc: "",
columns: [
{ data: "user" },
{ data: "server_ip" },
]
});
})
});
Всякий раз, когда я запускаю свой код, я получаю следующую ошибку:
Предупреждение о таблицах данных: идентификатор таблицы=recording_datatable — Запрошенный неизвестный параметр «пользователь» для строки 0, столбца 0. Для получения дополнительной информации об этой ошибке.
Я уже реализовывал DataTable ранее из PHP и, похоже, все делаю правильно. Я просто не знаю, почему это не работает. Я посетил почти каждый документ здесь, Stackoverflow и Datatables.net и по какой-то причине, похоже, никакая реализация не работает.
Я знаю, что это окажется простой ошибкой, но эта проблема заняла большую часть моих 3 дней. Любая помощь будет очень признательна. Спасибо.
Комментарии:
1. Ваш код JavaScript выглядит нормально. Но ваш JSON на самом деле не является JSON — это строковое представление JSON (и оно неполное, но, возможно, это просто отредактированная версия вопроса). Почему вы используете
json.dumps
? Вы должны передавать массив объектов в JsonResponse,[ {"user": "Joe" }, { "user": "Jane" } ]
а не передавать строку.2. О боже! Я законно только что сделал это, и это кажется таким глупым. Да, это не JSON. Я просто преобразовал его в JSON вот так, и это сработало.
const parsedData = JSON.parse(data);
. Я использовал json.dumps() из-за решения, которое я нашел в Интернете. Я думаю, что мой Python или веб-разработка должны быть сильно отточены. Спасибо, парень, за твою помощь. Наконец, можете ли вы помочь мне, почему мойreturn JsonResponse(structure, status = 200, safe=False)
JSON не возвращается в мой шаблон?
Ответ №1:
Я нашел решение благодаря помощи @andrewjames. Я передавал строку вместо ответа JSON. Может быть, ошибка новичка.
Я использовал json.dumps() в своем views.py файл, потому что я хотел сериализовать объект перед передачей его в JsonResponse (), но это была неправильная реализация. Сначала я изменил строку на JSON в шаблоне, const parsedData = JSON.parse(data);
и мои данные заполнили таблицу данных. Как только я осознал свою ошибку, я в конце концов отредактировал свой views.py файл для отправки JsonResponse (), и я сделал это следующим образом.
def recordingDataTable(request):
if request.is_ajax and request.method == "GET":
vicidial_agent_log = VicidialAgentLog.objects.filter(event_time__gte='2021-04-16 16:00:00').values('user', 'server_ip')
return JsonResponse(list(vicidial_agent_log), status = 200, safe=False)
return JsonResponse({}, status = 400)