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

leaflet multiple markers django map reference?

我正在使用 Python 3.4,最新的 Django 和 leaflet 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>

我真的不熟悉 django,所以我可能是错的,但是你的 for 循环不会插入多个 map_init_basic methods/callbacks 吗?所以你一遍又一遍地声明相同的回调函数?并且只有一个会在地图初始化时执行。我的猜测是您应该将 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 被调用时,只有第三个函数会执行。

更正后的代码:

{% 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>