javascript - 相同的语句在 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 个元素。这非常令人困惑。
解决方案
你不能这样做。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 %}
推荐阅读
- php - 控制器上的 Laravel 多个 Foreach
- plsql - 从 tiff 转换为其他多页格式
- ajax - 几个系列的Highchart rowsURL
- javascript - $.addClass 不会立即更新 DOM 吗?
- python - nmap PortScannerError,找不到 nmap
- entity-framework - 使用 Lambda 表达式在实体框架中急切加载 2 个级别
- react-native - 在 Xcode 10.0 上运行 react-native 应用程序时收到错误消息
- wordpress - Loco translate 仅适用于定制器,但未在前端翻译
- ruby - 多案例表达式
- docker - 如何使用 Docker for Windows 访问 localhost 上的 kubernetes 服务