Я получаю сообщение об ошибке Uncaught ReferenceError: False is not defined
при попытке доступа к переменной словаря Python в шаблоне Django.
Я пытался сбежать с помощью safe
, но это не сработало:
result = {'test1' : [{'var1': 'PLANNED', 'var2': 'description', 'var3': False},{'var1':'PLANNED', 'var2':'description', 'var3': True}], 'test2' : [{'var1': 'PLANNED', 'var2': 'description', 'var3': False},{'var1':'PLANNED', 'var2':'description', 'var3': True}]}
return render(request, 'users/team.html', {'team' : team, 'result ' : result })
Я получаю доступ к этому в своем HTML, как показано ниже:
var params= {{result |safe}};
Как я могу присвоить этот результат переменной в шаблоне Django?
Проблема в том, что вы фактически пишете var params = ... False ...;
на JavaScript. Однако false
в JS записывается как false
, а не False
! Обратите внимание на разницу в капитализации. Это приводит к тому, что виртуальная машина JS пытается частично присвоить значение переменной False
переменной params
. К сожалению, вы не определили переменную с именем False
! Следовательно, ReferenceError
.
Один из подходов к устранению этой проблемы — цепочка с фильтром json_script
:
{{ result|json_script:"params-data" }}
<script>
var value = JSON.parse(document.getElementById('params-data').textContent);
</script>
Другой подход заключается в ручном кодировании/декодировании result
как JSON. например
import json
return render(request, 'users/team.html', {'team' : team, 'result ' : json.dumps(result) })
и
var params = JSON.parse('{{result|safe}}');
Первый вариант явно предпочтительнее из-за его краткости и простоты.
@shilpa ах, я неправильно понял твою проблему. Мой ответ обновлен.
В моем случае я не хочу преобразовывать весь результат в случай ниже. Также я не могу преобразовать bool на стороне python в нижний регистр. Обновлен код, чтобы показать, как я передаю данные во внешний интерфейс.