#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
.