尝试在Django服务器上渲染Folium映射时出错

时间:2019-03-21 12:16:54

标签: python django dictionary render folium

view.py

map = folium.Map(location=[df['latitude'].mean(), 
df['longitude'].mean()],tiles="cartodbpositron",zoom_start=12)

map.save("map.html")

context = {'my_map': map}

return render(request, 'my_map.html', context)

my_map.html:

<!DOCTYPE html>
<html lang="en">
<head>
     <meta charset="UTF-8">
     <title>Title</title>
</head>
<body>
{{ my_map }}
</body>

浏览器结果:

folium.folium.Map object at 0x7f49d85662b0

我不确定在用户通过先前的html表单提交输入后,如何确定如何使html / js在浏览器上工作... 我似乎到处都是,解决方案也有很多类似的问题,但是我什么都没用!

谢谢!

2 个答案:

答案 0 :(得分:2)

此响应是为了增加其他人(如我)在尝试在Django模板中渲染Folium地图时也遇到此问题的Google覆盖率。

您的代码

请参见每个代码块内的注释,以了解如何按预期方式呈现地图。

views.py

map = folium.Map(location=[df['latitude'].mean(), 
df['longitude'].mean()],tiles="cartodbpositron",zoom_start=12)

map.save("map.html")

# {'my_map': map} will output the object, which is what you are seeing
# to rectify this we need to turn it into an iframe which 
# the template can then render.
context = {'my_map': map} # change to {'my_map': map._repr_html_()}

return render(request, 'my_map.html', context)

模板

<!DOCTYPE html>
<html lang="en">
<head>
     <meta charset="UTF-8">
     <title>Title</title>
</head>
<body>
# after making the change in our views.py this will return the html but
# the template will not render it as expected because it is being escaped.
# You must declare it 'safe' before it will be rendered correctly.
{{ my_map }} # change to {{ my_map | safe }}
</body>

有关更多信息,请参见Folium文档页面herethis这样的帖子。

希望有帮助。

答案 1 :(得分:0)

Map对象具有渲染method,该渲染器呈现其html表示形式。

您可以直接尝试:

<body>
{{ my_map.render }}
</body>

或者您可以使用Map.render方法来实现自定义包含标签,这样就可以将参数传递给render方法。请参阅此以了解有关inclusion and custom tags的更多信息。

# The template tag.
for django.template import Library

register = Library()

@register.inclusion_tag
def render_map(map_object, **kwargs):
    return map_object.render(**kwargs)

在您的模板中:

<body>
{% render_map my_map some_arg1=arg1  some_arg2=arg2 %}
</body>