首页 > 解决方案 > 相同的语句在 for 循环中给出错误

问题描述

Server端使用python和flask,html模板为jinja2。我正在尝试用 google api 做一个标记。经纬度信息存储在stores[][]其中,从 python 传递过来。此代码<script>位于我的 html 文件中的标记之间,并且工作正常。

var marker = new google.maps.Marker({position: {lat: {{stores[0][5]}}, lng: {{stores[0][6]}}}, map: map});
var marker = new google.maps.Marker({position: {lat: {{stores[4][5]}}, lng: {{stores[4][6]}}}, map: map});

我有多个 lat,lng 我想从中制作标记,所以我把它放在一个for循环中。

var i;
for (i = 0; i < 5; i++) { 
  var marker = new google.maps.Marker({position: {lat: {{stores[i][5]}}, lng: {{stores[i][6]}}}, map: map});
}

完全相同的代码,但i放置了索引而不是用于索引的数字。它突然给出错误说

jinja2.exceptions.UndefinedError: list object has no element Undefined

我仔细检查了stores[][]有超过 5 个元素。这非常令人困惑。

标签: javascriptpythongoogle-mapsflaskjinja2

解决方案


你不能这样做。Jinja 完全在服务器上进行评估,远在 JS 可以在客户端上运行之前。Jinja 无法访问 JS 代码中的变量。

您应该将循环移动到 Jinja 本身。

{% for store in stores %}
   var marker = new google.maps.Marker({position: {lat: {{ store[5] }}, lng: {{ store[6] }}}, map: map});
{% endfor %}

推荐阅读