How can I include HTML in a Folium Marker popup?

You should check the Folium version you are using. 0.2.0 has changed how popups are added, as explained in this issue thread: https://github.com/python-visualization/folium/issues/360

Popups now no longer take html automatically but rather one must pass in a folium.element.IFrame of the html.

This notebook shows the differences in folium 0.2.0: http://nbviewer.jupyter.org/github/bibmartin/folium/blob/issue288/examples/Popups.ipynb

And, the code would look something like this (found in the notebook above):

m = folium.Map([43,-100], zoom_start=4)

html="""
    <h1> This is a big popup</h1><br>
    With a few lines of code...
    <p>
    <code>
        from numpy import *<br>
        exp(-2*pi)
    </code>
    </p>
    """
iframe = folium.element.IFrame(html=html, width=500, height=300)
popup = folium.Popup(iframe, max_width=2650)

folium.Marker([30,-100], popup=popup).add_to(m)

m

NB: The way to create markers, therefore, is no longer simple_marker or circle_marker, but rather folium.Marker or folium.CircleMarker().

The docs have also been (recently?) put up.


You can embed arbitrary HTML using folium.Html, with script=True. Here is a minimal example which demonstrates this:

import folium

m = folium.Map([51.5, -0.25], zoom_start=10)

test = folium.Html('<b>Hello world</b>', script=True)

popup = folium.Popup(test, max_width=2650)
folium.RegularPolygonMarker(
    location=[51.5, -0.25], popup=popup,
).add_to(m)

m.save('osm.html')

Without script=True, the string passed to folium.Html is escaped and so the HTML markup is visible in the marker popup.

This is documented in the branca examples page. I was using Folium 0.3.0.


Try changing the location, URL, and popup text you want.


import folium
f = folium.Figure(width=1000, height=1000)
m=folium.Map([39.067758, -94.573534], zoom_start=25).add_to(f)
pp= folium.Html('<a href="'+ 'give your url here'+'"target="_blank">'+ 'popup text' + '</a>', script=True)
popup = folium.Popup(pp, max_width=2650)
folium.Marker(location=[39.067758, -94.573534], popup=popup).add_to(m)
m=m._repr_html_()