你可以在模板的任何地方使用{{ 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文档以获得更多信息。
此外,请参考Ford的答案,他指出了tojson
过滤器,它是Jinja2标准过滤器集合的补充。
编辑于2018年11月:tojson
现在已包含在Jinja2的标准过滤器集合中。
json
模块,将你的数据以 json 对象的形式进行转储。 - mensi