You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Folium地图弹窗超链接优化:无需新开页面同页展示内容小窗口

Folium弹窗超链接转当前页模态框实现方案

Folium基于Leaflet.js封装,你可以通过注入自定义HTML/CSS/JS的方式实现需求,不需要改动Folium底层代码,步骤如下:

  • 第一步:注入全局模态框基础代码
    先在地图初始化后,往HTML根节点插入模态框的样式、容器和控制逻辑,代码示例:
import folium
from branca.element import Element

# 初始化地图
m = folium.Map(location=[39.9042, 116.4074], zoom_start=12)

# 注入模态框相关代码
modal_assets = """
<style>
.modal {
    display: none; 
    position: fixed;
    z-index: 9999; 
    left: 0;
    top: 0;
    width: 100%; 
    height: 100%; 
    overflow: auto; 
    background-color: rgba(0,0,0,0.4); 
}
.modal-content {
    background-color: #fefefe;
    margin: 15% auto; 
    padding: 20px;
    border: 1px solid #888;
    width: 70%; 
    max-width: 700px;
    border-radius: 8px;
}
.close {
    color: #aaa;
    float: right;
    font-size: 28px;
    font-weight: bold;
    cursor: pointer;
}
.close:hover,
.close:focus {
    color: black;
    text-decoration: none;
}
</style>

<div id="catalogModal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <div id="modalContent"></div>
  </div>
</div>

<script>
const modal = document.getElementById("catalogModal");
const closeBtn = document.querySelector(".close");

closeBtn.onclick = () => modal.style.display = "none";
window.onclick = (e) => e.target == modal && (modal.style.display = "none");

// 全局打开模态框方法,传入目录表的HTML内容即可
function showCatalog(content) {
  document.getElementById("modalContent").innerHTML = content;
  modal.style.display = "block";
}
</script>
"""
m.get_root().html.add_child(Element(modal_assets))
  • 第二步:修改Marker弹窗的超链接逻辑
    把原来跳转新页的a标签,替换为点击触发showCatalog方法的可点击文本,直接传入对应点位的目录表内容:
# 示例点位数据
test_point = {
    "name": "XX测试点",
    "meta": "运营状态:正常<br>建设时间:2023年6月<br>负责人员:张三",
    "catalog": "<h4>XX测试点目录表</h4><ul><li>2024年1月监测数据</li><li>2024年2月监测数据</li><li>历史运维记录</li></ul>"
}

# 构造弹窗内容
popup_html = f"""
<h5>{test_point['name']}</h5>
<p>{test_point['meta']}</p>
<span style="color:#2385bb; cursor:pointer; text-decoration:underline" onclick='showCatalog(`{test_point["catalog"]}`)'>查看完整目录表</span>
"""

# 添加点位到地图
folium.Marker(
    location=[39.9042, 116.4074],
    popup=folium.Popup(popup_html, max_width=300)
).add_to(m)
  • 第三步:导出使用
    直接正常保存地图文件即可,点击弹窗里的「查看完整目录表」就会在当前页弹出模态框展示内容:
m.save("map.html")

如果你的目录表内容需要动态请求,只需要修改showCatalog方法,传入点位ID后发请求拉取对应内容再渲染到模态框即可,其余逻辑不需要调整。如果目录内容含特殊字符,提前做下转义避免JS语法报错。


内容的提问来源于stack exchange,提问作者abdelhadi harrouz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:36:02