对于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是迄今为止我遇到过的最简单,最互动的软件。
答案 0 :(得分:1)
在您的代码中,map
是一个folium.Map
对象,尚不是带有html / javascript的字符串。您需要先渲染它。通常,这将创建一个完整的HTML页面。对于Jupyter笔记本,此HTML页面被放入iframe。因此,有两种选择:
如果您不想或不需要将地图放在模板中,则可以直接呈现页面:m.get_root().render()
返回带有完整HTML / JS页面的字符串。
如果要将地图嵌入模板,则可以使用iframe:
m._repr_html_()
返回带有HTML / JS页面的iframe的字符串。