首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在视图中添加多张django-传单地图?

如何在视图中添加多张django-传单地图?
EN

Stack Overflow用户
提问于 2018-11-20 16:57:32
回答 2查看 1.3K关注 0票数 2

我可以用django传单在一个页面上显示一张地图。在另一页中,我试图在页面中显示两个(或更多)地图,但我不知道如何显示。

用于在一页中显示地图:

代码语言:javascript
复制
<div class="card">
   {% leaflet_map "main" callback="map_init" %}
</div>

<script type="text/javascript">
function map_init(map, options) {
    // get point lat and lon
    var lon = "{{ project.longitude }}";
    var lat = "{{ project.latitude }}";
    // zoom to point & add it to map
    map.setView([lat, lon], 12);
    L.marker([lat, lon]).addTo(map);

}</script>

以上工作良好,只要一张地图需要显示。但是,我不知道如何修改上面的内容来支持多个映射。

我已经在这里启动了小提琴页面(这有点空白),不确定它是否会有帮助。

我正在尝试的是在下面的html中填充'img-top‘div:

代码语言:javascript
复制
var locations = [
	{"lat":27.988098,"lng":86.924925},
	{"lat":27.679535,"lng":83.507020}
]
代码语言:javascript
复制
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="card-columns m-5">
  <div class="card">
    <div class="card-header">Location A </div>
    <div class="img-top" id="map-1" style="height:200px"></div>
    <div class="card-body">
    Some information of A
    </div>
  </div>
  
   <div class="card">
    <div class="card-header">Location B </div>
    <div class="img-top" id="map-2" style="height:200px"></div>
    <div class="card-body">
    Some information of B
    </div>
  </div>
  
</div>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-21 14:18:43

这就是我能够在div中动态显示两个(或更多)地图的方式。

代码语言:javascript
复制
<script type="text/javascript">

items_json.forEach(item => {
    let map = L.map(item.id + "-map").setView([item.fields.latitude, item.fields.longitude], 10);
    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);
});

</script>

在HTML中,这个<div class="img-top" id="{{id}}-map" style="height:200px"></div>会被地图填充。

以下是JS:https://jsfiddle.net/droidxn/w7d5nqps/10/

票数 0
EN

Stack Overflow用户

发布于 2018-11-20 17:13:29

不太干,但下面的工作吗?

代码语言:javascript
复制
<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中编写您的逻辑,以实现您想要做的事情。

当您调用{% leaflet_map ... %}时,您可以看到django传单所做的事情。

map.html

更新的JS Fiddle:https://jsfiddle.net/cdfrn53L/

编辑:

在Django模板中使用for循环:

代码语言:javascript
复制
{% 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>

如果您的视图构建了一个位置列表:

代码语言:javascript
复制
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_idcallback值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53397888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档