Я визуализирую данные ответа json через apiview в django restframework, в html template list.html, где я хочу получить эти данные в коде javascript. Однако каждый раз он выдает сообщение «отсутствует) после ошибки списка аргументов», даже если они фактически не присутствуют в полученных данных (как видно в инструментах проверки хрома)

Получение ошибки

var list =JSON.parse("{{data|safe}}")

enter image description here

Код apiview из views.py, который отображает данные:

@api_view(['GET','POST'])
def memeList(request):
    if request.method=='GET':
        meme = Meme.objects.all().order_by('-meme_id')[:100]
        serializer = MemeSerializer(meme, many=True)
    elif request.method=='POST':
        serializer=MemeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()

    serJS = JsonResponse(serializer.data,safe=False)
    return render(request,'list.html',{'data':serJS.content})

Любое решение для этого, поскольку я перепробовал все доступные решения в Интернете, проблема не решена.

0
Dharmesh Singh 11 Фев 2021 в 22:32

2 ответа

Лучший ответ

Проблема заключается в последней строке фрагмента из вашего файла views.py:

return render(request, 'list.html', {'data': serJS.content})

Здесь serJS.content возвращает байтовую строку, представляющую содержимое. Чтобы разобрать его как JSON, вам нужно преобразовать его в строку, отобразить в теле html, а затем он будет правильно проанализирован как JSON. Используйте вместо этого:

return render(request, 'list.html', {'data': serJS.content.decode()})
1
Safiul Kabir 11 Фев 2021 в 20:14

Вы не можете сделать это:

var list = JSON.parse("{{data|safe}}")

{{ data|safe }} отобразит объекты Python, которые нельзя (надежно) проанализировать как JSON.

Скорее всего, вы захотите использовать json_script шаблонный фильтр. Следуйте инструкциям в документации, чтобы получить данные в формате JSON в JavaScript.

1
stefanw 11 Фев 2021 в 19:57
66161585