Django 网页中未显示 Folium 地图

Folium map not displaying in Django webpage

对 Django(以及一般的 Web 开发)非常陌生,所以提前致歉。

我正在尝试在 Django 网页中显示我的 Folium 地图,但我似乎无法弄清楚为什么我最终会得到一个空白屏幕。我在 SO 中查找了其他帖子,但他们都要求专门弹出窗口或在 Jupyter 中显示。

views.py

from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponse
from django.template.loader import get_template
from django.template.context import RequestContext
import pandas as pd
import folium

def folium_map(request):
    coords = [(40.7831, -73.9712), (40.6782, -73.9412), (40.7282, -73.7949)]
    map = folium.Map(location=[40.7118, -74.0131], zoom_start=12)
    for coord in coords:
        folium.Marker(location=[coord[0], coord[1]]).add_to(map)

    context = {'map': map}
    return render(request, 'template.html', context)

然后,在我的 template.html 文件中,我尝试将地图插入到 div 标签中:

<div> {{ map|safe }} </div>

它是空白的。我需要一个 iframe 吗?是否有脚本源我应该是 运行 允许传单地图?我该如何设置它,因为我需要一个来源?我是否必须在本地将地图保存为 html 文件,因为我正在尝试部署它以便其他人可以使用它,如果每次生成地图时都是这样,它必须是保存在本地,我不确定人们是否会喜欢他们的内存或文件杂乱无章,因为这个工具会非常频繁地使用。

我是不是缺少显示地图的东西?我对其他地图库持开放态度,但 Folium 是迄今为止我遇到的最简单和最具交互性的库。

在您的代码中 map 是一个 folium.Map 对象,还不是带有 html/javascript 的字符串。您需要先渲染它。通常,这会创建一个完整的 HTML 页面。对于 Jupyter 笔记本,这个 HTML 页面被放入 iframe 中。所以有两种选择:

如果您不想或不需要将地图放入模板中,您可以直接呈现页面:m.get_root().render() returns 包含完整 HTML/JS 页面的字符串。

如果您想将地图嵌入到模板中,您可以使用 iframe: m._repr_html_() returns 带有带有 HTML/JS 页面的 iframe 的字符串。