我使用Python 3.4,最新的Django和传单django安装。我可以显示地图,并从列表中添加1个标记。
问题是添加列表中的所有标记。代码渲染所有标记但不是所有标记都添加到地图中。也许我通过范围问题丢失了地图参考?我不确定。这是我的代码,我真的可以使用帮助。
{% load leaflet_tags %}
<head>
{% leaflet_js %}
{% leaflet_css %}
</head>
<body>
{% if latest_device_list %}
<script type="text/javascript">
{% for device in latest_device_list %}
function map_init_basic (map, options) {
marker = new L.marker([{{device.Device_Lat}}, {{device.Device_Lon}}])
.bindPopup("<h3>"+{{device.Device_IMEI}}+"</h3>")
.addTo(map);
}
{% endfor %}
</script>
{% else %}
<p>No Devices are available.</p>
{% endif %}
{% leaflet_map "yourmap" callback="window.map_init_basic" %}
</body>
&#13;
答案 0 :(得分:2)
我真的不熟悉django,所以我可能错了,但你的for
循环没有插入多个map_init_basic
方法/回调?那你一遍又一遍地声明相同的回调函数?并且只有一个将在地图初始化时执行。我的猜测是你应该将for
循环放在标记声明周围的回调函数中:
<script type="text/javascript">
function map_init_basic (map, options) {
{% for device in latest_device_list %}
marker = new L.marker([{{device.Device_Lat}}, {{device.Device_Lon}}])
.bindPopup("<h3>"+{{device.Device_IMEI}}+"</h3>")
.addTo(map);
{% endfor %}
}
</script>
现在发生的事情是,当您在设备列表中说出三个标记时,它最终会像这样:
<script type="text/javascript">
function map_init_basic (map, options) {
marker = new L.marker([0, 0])
.bindPopup("<h3>"+ 'ABC' +"</h3>")
.addTo(map);
}
function map_init_basic (map, options) {
marker = new L.marker([1, 1])
.bindPopup("<h3>"+ 'DEF' +"</h3>")
.addTo(map);
}
function map_init_basic (map, options) {
marker = new L.marker([2, 2])
.bindPopup("<h3>"+ 'GHI' +"</h3>")
.addTo(map);
}
</script>
第二个函数声明,将覆盖第一个,第三个将覆盖第二个。因此,当调用map_init_basic
时,只会执行第三个函数。
答案 1 :(得分:0)
更正后的代码:
{% if latest_device_list %}
<script type="text/javascript">
function map_init_basic (map, options) {
var marker = null;
map.setView([51.505, -0.09], 13);
{% for device in latest_device_list %}
marker = new L.marker([{{device.Device_Lat}}, {{device.Device_Lon}}])
.bindPopup("<h3>"+{{device.Device_IMEI}}+"</h3>")
.addTo(map);
{% endfor %}
}
</script>
{% else %}
<p>No Devices are available.</p>
{% endif %}
{% leaflet_map "yourmap" callback="window.map_init_basic" %}
</body>