单张多个标记django地图参考?

时间:2015-02-06 20:15:14

标签: javascript python django leaflet

我使用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;
&#13;
&#13;

2 个答案:

答案 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>