传单多个标记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>
我正在使用 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>