==============
Django Leaflet
==============
See the `documentation <https://django-leaflet.readthedocs.io/en/latest/>`_ for more information.
*django-leaflet* allows you to use `Leaflet <http://leafletjs.com>`_
in your `Django <https://www.djangoproject.com>`_ projects.
It embeds Leaflet version *1.7.1*.
.. image:: https://readthedocs.org/projects/django-leaflet/badge/?version=latest
:target: http://django-leaflet.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://img.shields.io/pypi/v/django-leaflet.svg
:target: https://pypi.python.org/pypi/django-leaflet
.. image:: https://img.shields.io/pypi/dm/django-leaflet.svg
:target: https://pypi.python.org/pypi/django-leaflet
.. image:: https://coveralls.io/repos/makinacorpus/django-leaflet/badge.png
:target: https://coveralls.io/r/makinacorpus/django-leaflet
Main purposes of having a python package for the Leaflet Javascript library :
* Install and enjoy ;
* Do not embed Leaflet assets in every Django project ;
* Enjoy geometry edition with Leaflet form widget ;
* Control apparence and settings of maps from Django settings (e.g. at deployment) ;
* Reuse Leaflet map initialization code (e.g. local projections) ;
:note:
*django-leaflet* is compatible with `django-geojson <https://github.com/makinacorpus/django-geojson.git>`_ fields, which
allow handling geographic data without spatial database.
=========
TUTORIALS
=========
* `GeoDjango maps with Leaflet <http://blog.mathieu-leplatre.info/geodjango-maps-with-leaflet.html>`_
=======
AUTHORS
=======
* `Mathieu Leplatre <http://mathieu-leplatre.info>`_
* `Ariel Núñez <http://ingenieroariel.com>`_
* `Boris Chervenkov <https://github.com/boris-chervenkov>`_
* `Marco Badan <https://github.com/itbabu>`_
* `Bruno Renié <https://github.com/brutasse>`_
* `Simon Thépot <https://github.com/djcoin>`_
* `Thibault Jouannic <https://github.com/thibault>`_
* `jnm <https://github.com/jnm>`_
* `Manel Clos <https://github.com/manelclos>`_
* `Gaël Utard <https://github.com/gutard>`_
* `Alex Marandon <https://github.com/amarandon>`_
* `ollb <https://github.com/ollb>`_
* `smcoll <https://github.com/smcoll>`_
* `jnm <https://github.com/jnm>`_
* `OKso <https://github.com/oksome>`_
* `Florent Lebreton <https://github.com/fle/>`_
* `rgreenemun <https://github.com/rgreenemun>`_
* `Marco Badan <https://github.com/itbabu>`_
* David Martinez Morata
* `NotSqrt <https://github.com/NotSqrt>`_
* `Dylan Verheul <https://github.com/dyve>`_
* `Mactory <https://github.com/Mactory>`_
* `Petr Dlouhy <https://github.com/PetrDlouhy>`_
* `Kostya Esmukov <https://github.com/KostyaEsmukov>`_
* Yann Fouillat (alias Gagaro)
|makinacom|_
.. |makinacom| image:: http://depot.makina-corpus.org/public/logo.gif
.. _makinacom: http://www.makina-corpus.com
=======
LICENSE
=======
* Lesser GNU Public License
* Leaflet Copyright - 2010-2011 CloudMade, Vladimir Agafonkin
=========
CHANGELOG
=========
0.29.0 (2023-05-02)
-------------------
- Support Django 4.0, 4.1 and 4.2, and Python 3.10 and 3.11.
- Drop support for Django < 3.2 and Python < 3.7.
- Removed map_width / map_height. Moved CSS and height/width to custom CSS file #363
0.28.3 (2022-06-08)
-------------------
- Fix #346: distutils has been deprecated in Python 3.10.
- Change DEFAULT_TILES attribution to HTTPS #348
- Remove memoizing static URLs #351
0.28.2 (2021-10-25)
-------------------
- Fix field_store_class usage in map template.
0.28.1 (2021-06-07)
-------------------
- Upgrade Leaflet to 1.7.1.
- Deprecate 'LeafletWidget._get_attrs' in favor of 'LeafletWidget.get_attrs'
0.28.0 (2021-04-15)
-------------------
- Support Django 3.1 and 3.2.
- Drop support for Django 1.11, 2.0, and 2.1.
- translate to persian #313
0.27.1 (2020-07-31)
-------------------
- Replace link to geojsonlint.com with geojson.io. #298
0.27.0 (2020-07-03)
-------------------
- Drop support for Django < 1.11 and Python 2
- Upgrade proj4js to 2.6.1 and Proj4Leaflet to 1.0.2 (#287)
- Update Czech translations, add Slovak translations #269
- Add Arabic translation #274
- Precision fixes #280 #291
- Display the map on mobile (Fixes #241) #292
- Updated Leaflet to 1.6.0
0.26.0 (2019-12-06)
-------------------
- Django 3.0 compatibility
0.25.0 (2019-10-18)
-------------------
- #225 changes in staticfiles for django 1.11.14
- #247 Allow resizing of raw Geometry textbox input via CSS, improve label, add docs
- #108 Add examples to docs on adding overlays, customising maps in templates, admin and forms
- #248 Allow use of a custom widget in the Admin. (fixes #151)
- #261 Add request to formfield_for_dbfield signature; fix #260
- #262 Fix Missing staticfiles manifest entry for 'leaflet/images'
0.24.0 (2018-06-07)
-------------------
- Updated Leaflet to 1.3.1
0.23.0 (2017-11-28)
-------------------
- Fix fatal bug with Django => 1.11.2 for non-GIS databases
- fixes #188 Better replace for icon image
- Add Russian translation
- Add Hungarian translation
- Allow storing global leaflet map instances
0.22.0 (2017-04-06)
-------------------
- Set a default max zoom in leaflet.forms _setView to avoid an error.
- Fix the div ids to work with admin inlines.
- Django 1.11 compatibility
- Fix multipolyline/multipolygon and polyline/polygon not working
0.21.0 (2017-02-28)
-------------------
- Update leaflet.draw and fix a packaging and a javascript bug
0.20.0 (2017-01-27)
-------------------
**New features**
- Update Leaflet to 1.0.3 (#169)
- Update Leaflet-draw to 0.4.0 (#169)
- Update Proj4Leaflet to 1.0.0 (#169)
- Made `static` calls lazy, to fix issues with non-default STATICFILES_STORAGE (#149)
- Add example application (#168)
**Bug fixes**
- Use SpatiaLite library path from environment variable for running test (#173)
- Fix max zoom level (#165)
- Add SPATIAL_EXTENT default value to the default settings (#167)
Many thanks to @KostyaEsmukov, @cleder, @sikmir and @seav for their contributions!
0.19.0 (2016-08-22)
-------------------
**New features**
- Added ``leaflet.admin.LeafletGeoAdminMixin``, useful for stacked or tabular
inline forms (thanks @KostyaEsmukov, @Xowap)
0.18.2 (2016-08-16)
-------------------
- Fix compatibility with Django <= 1.7
0.18.1 (2016-04-07)
-------------------
- If the TILES setting contains an empty list, no default tiles layer is generated (thanks @dyve).
- Fix to allow multipoints saving (fixes #130, thanks @rukayaj)
- Fix settings override (#142, thanks @ndufrane)
- Fix for templatetags.leflet_js debug setting (#148, thanks @arctelix)
- Fixes for Django 1.10 compatibility (#138, thanks @PetrDiouhy)
0.18.0 (2016-01-04)
-------------------
**New features**
* Use a LazyEncoder to allow lazy translations in settings (#132, thanks @Mactory)
* Enable settings_overrides also for admin (fixes #120, thanks @PetrDiouhy)
* Add tests for Django 1.9 and Python 3.5 (thanks @itbabu)
**Bug fixes**
* Fix LeafletWidget behaviour on GeometryCollectionField (fixes #135)
0.17.1 (2015-12-16)
-------------------
* Update Leaflet to 0.7.7
* Update Leaflet-draw to 0.2.4
* Fix rendering of leaflet widget when initial value is an empty string
0.17.0 (2015-11-11)
-------------------
**New features**
* Pass relative URLs for static files through django.contrib.staticfiles (thanks @dyve, fixes #111)
* Allow to override settings at the template tag level (thanks @PetrDiouhy, fixes #59)
* Update Leaflet to 0.7.5 (@dyve)
* Add Czech locale (thanks @PetrDiouhy)
**Bug fixes**
* Fix interaction with django-geojson (#106, thanks @batisteo)
* Use protocol independant URLs in default OSM tiles (thanks @NotSqrt)
* Fix deprecated TEMPLATE_DEBUG (#121, thanks @josenaka)
* Fix errors with multi-word field names (#123, thanks @josemazo)
* Fix loadevent not being taken into account in forms (#127, thanks @josemazo)
0.16.0 (2015-04-17)
-------------------
**New features**
* Add setting ``FORCE_IMAGE_PATH`` to bypass Leaflet guess on image paths
(*useful when using django-compressor*) (thanks @nimasmi)
* Add Hebrew translations (thanks @nonZero)
* Map attribution can be translated using ugettext_lazy
**Bug fixes**
* Fix widgets hanging forever with points (thanks @Azimkhan, fixes #90)
* Remove setTimeout when calling setView() (thanks @manelclos, fixes #89)
* Fix minZoom/maxZoom when undefined in settings (thanks Manel Clos)
0.15.2 (2014-12-22)
-------------------
* Allow to set any leaflet tileLayer option in ``TILES`` and ``OVERLAYS`` settings (fixes #70).
0.15.1 (2014-12-04)
-------------------
* Remove special characters in README (fixes #82)
* Fix translation in French (fixes #86)
* Fix es localization
0.15.0 (2014-10-24)
-------------------
* Add ability to add overlay tile layers via new setting ``OVERLAYS``.
0.14.2 (2014-10-24)
-------------------
* Fix Django 1.7 support in tests (thanks Marco Badan)
* Add spanish translations (thanks David Martinez)
0.14.1 (2014-07-30)
-------------------
* Fix draw events being received for each draw control on the map.
(**Caution**: ``map.drawControl`` attribute is not set anymore)
0.14.0 (2014-07-29)
-------------------
* Fix GeoJSON serialization when creating new MultiPoint records
* Make the only layer match the map max/min_zoom (fixes #67) (thanks Manel Clos)
* Added widget attribute to edit several fields on the same map
0.13.7 (2014-06-26)
-------------------
* Fix typo in default proj4js path (ref #71)
0.13.6 (2014-06-26)
-------------------
* Setup Projection machinery in Leaflet forms if necessary
* Django Leaflet forms fiels without libgeos installed (thanks Florent Lebreton)
0.13.5 (2014-06-18)
-------------------
* Prevent SRID download when default is used
0.13.4 (2014-06-13)
-------------------
* Fix SRID projection file not being loaded
0.13.3 (2014-06-10)
-------------------
* Upgrade to Leaflet 0.7.3
0.13.2 (2014-04-15)
-------------------
* Fix regression where maps have null as max zoom
0.13.1 (2014-04-10)
-------------------
* Fix GEOS dependency, back as optional for geometry edition only (fixes #65)
* Add minZoom and maxZoom to map initialization
* Add support of advanced static files locations, like S3 (thanks @jnm)
0.13.0 (2014-03-26)
-------------------
* Add support of Leaflet form fields on Django >= 1.4.2 (thanks GaÄŤl Utard)
0.12 (2014-03-22)
-----------------
* Add support of GeoJSON fields
0.11.1 (2014-02-12)
-------------------
* Do not complain about tile extent if SRID is 3857
0.11.0 (2014-02-07)
-------------------
* Add control of `metric` and `imperial` in `SCALE` option (thanks @smcoll)
* Upgrade to Leaflet.draw 0.2.3
0.10.1 (2014-02-03)
-------------------
* Upgrade to Leaflet 0.7.2
0.10.0 (2014-01-22)
-------------------
* Python 3 support (thanks @itbabu)
* Added JavaScript test using Mocha
0.9.0 (2013-12-11)
------------------
* Upgrade to Leaflet 0.7.1
* Fix unsaved warning being always triggered on Internet Explorer.
* Added DE locale (thanks @rosscdh)
* Fix installation with python 2.6 (thanks @ollb)
0.8.5 (2013-11-05)
------------------
* Fix name collision.
0.8.4 (2013-11-05)
------------------
* Fix regression in Django leaflet options serialization.
0.8.3 (2013-11-05)
------------------
* Switch to lazy gettext in leaflet module init.
0.8.2 (2013-10-31)
------------------
* Fix drawing of multi-polygon (fixes #37)
* Fix attached data for events with jQuery fallback (fixes #38)
* Fix Javascript syntax errors when using form prefixes (fixes #40)
0.8.1 (2013-09-30)
------------------
* Fix Leaflet library inclusion with "plugins=ALL" outside Admin.
* Do not include translations in every widgets outside Admin.
* Fix syntax error if form widget translations contains quotes.
* Fix dependency error if Leaflet is loaded after the form widget in the DOM.
* Respect plugins declaration order using OrderedDicts
* Prepend forms assets (instead of extend) if PLUGINS['forms'] already exists.
0.8.0 (2013-09-18)
------------------
* Renamed Leaflet map fragment template
* Leaflet map geometry widgets for adminsite and forms (requires Django 1.6)
* Fix geometry type restriction in form fields (fixes #32)
* Use jQuery for triggering events, only if CustomEvent constructor is not available (fixes #27, fixes #34)
0.7.4 (2013-08-28)
------------------
* Fix projection download error if not available
* Compute resolutions the same way TileCache does it, and provide
example of TileCache configuration.
* Raise ImproperlyConfigured if TILES_EXTENT is not portrait (since not supported)
0.7.3 (2013-08-23)
------------------
* Do not use console() to warn about deprecated stuff if not available (<IE9)
* Fix apparence of Reset view control for Leaflet 0.6
* Add French and Italian locales
0.7.2 (2013-08-23)
------------------
* Fix JS error when no callback value is provided.
0.7.1 (2013-08-21)
------------------
* Fix map initialization with default tiles setting
* Fix map ``fitBounds()`` to ``SPATIAL_EXTENT`` in settings
0.7.0 (2013-08-21)
------------------
**Breaking changes**
* The ``leaflet_map`` template tag no longer registers initialization
functions in global scope, and no longer adds map objects into ``window.maps``
array by default. Use ``LEAFLET_CONFIG['NO_GLOBALS'] = False`` to
restore these features.
* Initialization callback function no longer receives the map ``bounds`` in second
argument, but the map options object.
**Deprecated**
* JS default callback function ( *<name>Init()* ) for map initialization is **deprecated**.
Use explicit ``callback`` parameter in template tag, or listen to window event ``map:init`` instead.
(See *Use Leaflet API* section in README.)
* ``TILES_URL`` entry in ``LEAFLET_CONFIG`` is **deprecated**.
Use ``TILES`` instead.
* Settings lookup is restricted to ``LEAFLET_CONFIG`` dict. Most notably,
``SRID``, ``MAP_SRID`` and ``SPATIAL_EXTENT`` at global Django settings level
are discouraged.
**New features**
* Add ability to associate layers attributions from settings
* Add ``auto-include`` key for entries in ``PLUGINS`` setting, in order
to implicity load plugins with ``leaflet_css`` and ``leaflet_js`` tags.
* Rewrote map initialization, into less flexible and obstruvise way.
* Use plugin system for Leaflet.MiniMap.
* Add ``loadevent`` parameter to ``leaflet_map`` tag.
* Map initialization is now idempotent, does nothing if map is already initialized.
* Add ``ATTRIBUTION_PREFIX`` setting to control prefix globally.
0.6.0 (2013-08-08)
------------------
* Upgrade to Leaflet 0.6.4
0.6.0a (2013-07-05)
-------------------
* Upgrade to Leaflet 0.6.2
* Upgrade Leaflet.Minimap (rev 3cd58f7)
* Upgrade Proj4Leaflet (rev f4f5b6d)
0.5.1 (2013-04-08)
------------------
* Add minimap support
* Drop Leaflet version switching
* Update Leaflet to 0.5.1
* Update Leaflet.Minimap
* Fix apparence of Reset view button
0.4.1 (2012-11-05)
------------------
* Fix div creation test in template.
0.4.0 (2012-11-05)
------------------
* Remove imperial scale.
* Add ``create_div`` parameter
0.3.0 (2012-10-26)
------------------
* Remove max resolution setting since it can be computed
* Allow scale control even if view is not set
* Upgrade Leaflet to 0.4.5
0.2.0 (2012-09-22)
------------------
* Fix packaging of templates
* Use template for <head> fragment
* Do not rely on spatialreference.org by default
* Default settings for SRID
* Default settings for map extent
* Default map height
* Default tiles base layer
* map variable is not global anymore
0.1.0 (2012-08-13)
------------------
* Initial support for map projection
* Show zoom scale by default
* Spatial extent configuration
* Initialization callback instead of global JS variable
* Leaflet version switching
* Global layers configuration
0.0.2 (2012-03-22)
------------------
* Add IE conditional CSS
0.0.1 (2012-03-16)
------------------
* Initial working version