Вы можете использовать в {{ 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.