2014-11-23 3 views
4

У меня есть код Python, в котором я использую jinja для отправки данных в шаблон в Flask. Я могу получить доступ к коду, просто найти в HTML, но когда я пытаюсь отображать данные в Javascript, он не работает. Например, вот мой код Python:Использование jinja для отправки данных на Javascript

name = "Steve" 
return render_template('simple.html',data=json.dumps(name)) 

И в моем simple.html код в HTML тело:

<script> 
var name = {{ data }}; 
alert(name); 
</script> 

Ошибка в моей консоли говорит «SyntaxError: Неожиданный маркер '&' "

Я знаю, что я видел эту проблему раньше, я забываю, как ее решить.

ответ

7

Ничего, я понял. Мне нужно было безопасно использовать код. Пример:

<script> 
var name = {{ data|safe }}; 
alert(name); 
</script> 
4

Колба имеет встроенный фильтр tojson. Поэтому мы можем сделать:

колба:

data = { 
    "firstname": "Steve", 
    "lastname": "Jobs" 
} 
return render_template('simple.html', data=data) 

jinja2:

<script type="text/javascript"> 
var data = {{ data | tojson }}; 
console.log(data); 
</script> 
+1

Поскольку корректный JSON является действительным JS вы можете пропустить 'JSON.parse' шаг полностью и просто сделать 'var data = {{данные | tojson}}; –

+0

Выполнение этого не только делает код более безопасным, но и анализирует строку json для объекта JS. И объект JS больше равен dict в python. – aGuegu

+0

Когда объект JSON выписывается в блоке сценария (так же, как вы делаете 'var data = {{data | tojson}}'), он будет интерпретироваться браузером как JavaScript. Поскольку JSON является подмножеством JavaScript, «JSON», который был записан в блок сценария, будет интерпретироваться как обычный объект JavaScript браузером (поскольку JSON - это только данные, это безопасно, а не для записи любого пользователя -provided string в блок сценария, что небезопасно). Передача «JSON» в виде строки JavaScript в 'JSON.parse' просто добавляет лишний ненужный шаг. Имеет ли это смысл? –

Смежные вопросы