Не очень сухо, но работает ли нижеследующее?
<div class="card">
{% leaflet_map "map_1" callback="map_init_1" %}
</div>
<div class="card">
{% leaflet_map "map_2" callback="map_init_2" %}
</div>
<script type="text/javascript">
function map_init(map, lat, lon) {
// zoom to point & add it to map
map.setView([lat, lon], 12);
L.marker([lat, lon]).addTo(map);
}
function map_init_1(map) {
map_init(map, "{{ project1.latitude }}", "{{ project1.longitude }}")
}
function map2_init_2(map) {
map_init(map, "{{ project2.latitude }}", "{{ project2.longitude }}")
}
</script>
Мне кажется, что в django-листовке рассматриваются самые простые случаи.Возможно, вам придется написать свою логику в javascript, используя брошюру напрямую, чтобы добиться того, что вы пытаетесь сделать.
Вы можете увидеть, что делает django-leaflet, когда звоните {% leaflet_map ... %}
:
https://github.com/makinacorpus/django-leaflet/blob/master/leaflet/templates/leaflet/_leaflet_map.html
Обновлено JS Fiddle: https://jsfiddle.net/cdfrn53L/
РЕДАКТИРОВАТЬ:
С для петель в шаблоне Django:
{% for location in locations %}
<div class="card">
{% leaflet_map location.div_id callback=location.callback %}
</div>
{% endfor %}
<script type="text/javascript">
function map_init(map, lat, lon) {
// zoom to point & add it to map
map.setView([lat, lon], 12);
L.marker([lat, lon]).addTo(map);
}
{% for location in locations %}
function {{ location.callback }}(map) {
map_init(map, "{{ location.lat }}", "{{ location.lon }}")
}
{% endfor %}
</script>
При условии, что ваше представление создает список местоположений:
locations = [
{'lat': 27.988098, 'lng': 86.924925, 'div_id': 'map-1', 'callback': 'callback_1'},
{'lat': 27.679535, 'lng': 83.507020, 'div_id': 'map-2', 'callback': 'callback_1'}
]
Вы можете построить значения div_id
и callback
на основе индекса списка местоположений.