Folium地图未显示在Django网页中

时间:2019-01-28 23:20:34

标签: python django folium

对于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是迄今为止我遇到过的最简单,最互动的软件。

1 个答案:

答案 0 :(得分:1)

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

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

如果要将地图嵌入模板,则可以使用iframe: m._repr_html_()返回带有HTML / JS页面的iframe的字符串。