Ошибка при получении данных json через шаблоны django в javascript дает неперехваченную синтаксическую ошибку: отсутствует) после списка аргументов

#javascript #django #django-rest-framework #django-views #django-templates

#javascript #django #django-rest-framework #django-просмотры #django-templates

Вопрос:

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

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

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

введите описание изображения здесь

Код 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})
 

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

Ответ №1:

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

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

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

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

Ответ №2:

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

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

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

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

Комментарии:

1. Выдает ошибку «неожиданный токен amp;» при неиспользовании безопасного фильтра. Проблема заключалась в представлениях, в которых я передавал данные, которые я должен был сначала передать функции decode, как указано в принятом ответе..

2. данные были bytes объектом, который не может быть представлен в JSON. Вы все равно не должны использовать JSON.parse("{{data|safe}}") . Это уязвимость XSS, ожидающая своего появления. Используйте json_script .