Вы можете использовать {{ variable }}
в любом месте вашего шаблона, а не только в части HTML. Итак, это должно работать:
<html>
<head>
<script>
var someJavaScriptVar = '{{ geocode[1] }}';
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: {{ geocode[0] }} ' + someJavaScriptVar)" />
</body>
</html>
Думайте об этом как о двухэтапном процессе: во-первых, Jinja (механизм шаблонов, который использует Flask) генерирует ваш текстовый вывод. Это отправляется пользователю, который выполняет видимый им JavaScript. Если вы хотите, чтобы ваша переменная Flask была доступна в JavaScript в виде массива, вам необходимо сгенерировать определение массива в вашем выводе:
<html>
<head>
<script>
var myGeocode = ['{{ geocode[0] }}', '{{ geocode[1] }}'];
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: ' + myGeocode[0] + ' ' + myGeocode[1])" />
</body>
</html>
Jinja также предлагает более сложные конструкции из Python, поэтому вы можете сократить его до:
<html>
<head>
<script>
var myGeocode = [{{ ', '.join(geocode) }}];
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: ' + myGeocode[0] + ' ' + myGeocode[1])" />
</body>
</html>
Вы также можете использовать for
циклы, if
операторы и многое другое, дополнительные сведения см. В документации Jinja2.
Также обратите внимание на ответ Форда, который указывает на фильтр tojson
, который является дополнение к стандартному набору фильтров Jinja2.
Редактировать ноябрь 2018 г .: tojson
теперь включен в стандартный набор фильтров Jinja2.
person
mensi
schedule
24.06.2012