django-editor-ymaps


Namedjango-editor-ymaps JSON
Version 2.3.11 PyPI version JSON
download
home_pagehttps://github.com/kebasyaty/django-editor-ymaps
SummaryCreating and editing Yandex maps.
upload_time2024-05-28 14:32:08
maintainerNone
docs_urlNone
authorkebasyaty
requires_pythonNone
licenseMIT License
keywords django yandex maps admin editor
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. figure:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/logo.png?raw=true
   :target: https://pypi.org/project/django-editor-ymaps/
   :alt: Logo

|

.. image:: https://img.shields.io/badge/pypi-v24.0%20-blue.svg
   :target: https://pypi.org/project/pip/
   :alt: PyPI badge
.. image:: https://img.shields.io/badge/python-%3E%3D%203.12-yellow.svg
   :target: https://www.python.org/
   :alt: Python badge
.. image:: https://img.shields.io/badge/django-%3E%3D%205.0-brightgreen.svg
   :target: https://www.djangoproject.com/
   :alt: Django badge
.. image:: https://pepy.tech/badge/django-editor-ymaps
   :target: https://pepy.tech/project/django-editor-ymaps
   :alt: Downloads badge
.. image:: https://img.shields.io/github/license/mashape/apistatus.svg
   :target: https://github.com/kebasyaty/django-editor-ymaps/blob/master/LICENSE
   :alt: MIT badge

DjEYM ( django-editor-ymaps )
=============================
- **(ru)** *Удобное использование картографической службы Яндекса для веб-разработки на популярном и свободном фреймворке Django.*
- **(en)** *Convenient use of the Yandex map service for web development on the popular and free Django framework.*

Условия использования API Яндекс.Карт
--------------------------------------------------------------------
- **(ru)** `Условия использования Яндекс.Карт <https://tech.yandex.ru/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_
- **(ru)** `Получить API-ключ <https://tech.yandex.ru/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_

Terms of use for the API
--------------------------------------------------------------------
- **(en)** `Terms of use for the Yandex.Maps <https://tech.yandex.com/maps/jsapi/doc/2.1/terms/index-docpage/>`_
- **(en)** `Get the API key <https://tech.yandex.com/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_

|

Requirements
------------
- **Python** >= 3.12
- **Django** >= 5.0
- **Pillow** - `https://pypi.org/project/Pillow/ <https://pypi.org/project/Pillow/>`_
- **django-imagekit** - `https://github.com/matthewwithanm/django-imagekit <https://github.com/matthewwithanm/django-imagekit>`_
- **python-slugify** - `https://github.com/un33k/python-slugify <https://github.com/un33k/python-slugify>`_
- **django-ckeditor** - `https://github.com/django-ckeditor/django-ckeditor <https://github.com/django-ckeditor/django-ckeditor>`_
- **lxml** - `https://pypi.org/project/lxml/ <https://pypi.org/project/lxml/>`_
- **django-ipware** - `https://github.com/un33k/django-ipware <https://github.com/un33k/django-ipware>`_
- **django-colorful** - `<https://pypi.org/project/django-colorful/>`_
- **django-admin-sortable** - `<https://pypi.org/project/django-admin-sortable/>`_
-
- **Vue.js** - `<https://vuejs.org/>`_
- **Vuetify.js** - `<https://vuetifyjs.com/>`_

Installation
------------
Install libraries ( Ubuntu >= 18.04, Mint >= 19.x )::

    sudo apt install -y python3-dev libevent-dev build-essential libpq-dev libxml2-dev libxslt1-dev gettext libjpeg-dev python3-setuptools

Install libraries ( Fedora >= 38 )::

    sudo dnf install python3-devel python3-setuptools libevent-devel libpq-devel libxml2-devel libxslt-devel libjpeg-turbo-devel gettext

Install django-editor-ymaps using pip::

    pip install django-editor-ymaps

Settings
--------

Add settings::

    import os
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    INSTALLED_APPS = [
        ...
        'imagekit',
        'ckeditor',
        'ckeditor_uploader',
        'colorful',
        'adminsortable',
        'djeym',
        ...
    ]

    MIDDLEWARE = [
        ...
        'django.middleware.locale.LocaleMiddleware',
        'djeym.middlewares.AjaxMiddleware',
    ]

    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/3.0/howto/static-files/
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

    # To send test messages.
    # 1. Notify administrator of a new custom marker.
    # 2. Notify user about successful moderation of his marker.
    # Mail server for testings: $ python -m smtpd -n -c DebuggingServer localhost:1025
    EMAIL_HOST = 'localhost'
    EMAIL_PORT = 1025
    EMAIL_HOST_USER = ''
    EMAIL_HOST_PASSWORD = ''
    EMAIL_USE_TLS = False
    DEFAULT_FROM_EMAIL = 'noreply@site.net'

    # django-ckeditor
    # https://github.com/django-ckeditor/django-ckeditor
    CKEDITOR_BASEPATH = '/static/ckeditor/ckeditor/'
    CKEDITOR_UPLOAD_PATH = 'uploads/'
    CKEDITOR_FILENAME_GENERATOR = 'djeym.utils.get_filename'
    CKEDITOR_THUMBNAIL_SIZE = (300, 300)
    CKEDITOR_FORCE_JPEG_COMPRESSION = True
    CKEDITOR_IMAGE_QUALITY = 40
    CKEDITOR_IMAGE_BACKEND = 'pillow'
    CKEDITOR_ALLOW_NONIMAGE_FILES = False  # False - Only image files. (At your discretion)
    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'full',
            'height': 400,
            'width': '100%',
        },
        'djeym': {
            'toolbar': 'full',
            'height': 400,
            'width': 362,
            'colorButton_colors': 'F44336,C62828,E91E63,AD1457,9C27B0,6A1B9A,'
                                  '673AB7,4527A0,3F51B5,283593,2196F3,1565C0,'
                                  '03A9F4,0277BD,00BCD4,00838F,009688,00695C,'
                                  '4CAF50,2E7D32,8BC34A,558B2F,CDDC39,9E9D24,'
                                  'FFEB3B,F9A825,FFC107,FF8F00,FF9800,EF6C00,'
                                  'FF5722,D84315,795548,4E342E,607D8B,37474F,'
                                  '9E9E9E,424242,000000,FFFFFF',
            'colorButton_enableAutomatic': False,
            'colorButton_enableMore': True
        }
    }
    
    # (If a non-authenticated user requests an editor page.)
    # (Если не аутентифицированный пользователь запросит страницу редактора.)
    LOGIN_URL = '/admin/'  # or change to your URL
    
    # Required for django-admin-sortable
    # https://github.com/alsoicode/django-admin-sortable#configuration
    CSRF_COOKIE_HTTPONLY = False
    
    # The API key is used in the free and paid versions.
    # You can get the key in the developer’s office - https://passport.yandex.com/
    # ( API-ключ используется в свободной и платной версиях.
    #   Получить ключ можно в кабинете разработчика - https://developer.tech.yandex.ru/ )
    DJEYM_YMAPS_API_KEY = ''
    
    # For paid use API --> True
    # ( Для платного использования --> True )
    DJEYM_YMAPS_API_KEY_FOR_ENTERPRISE = False
    
    # Map download mode. Default = 'release'
    # (Режим загрузки карт.)
    # DJEYM_YMAPS_DOWNLOAD_MODE = 'debug' if DEBUG else 'release'

Add to main URLs
----------------

urls.py::

    from django.contrib import admin
    from django.urls import path, include
    from django.conf import settings
    from django.contrib.staticfiles.urls import static
    
    urlpatterns = [
        ...
        path('admin/', admin.site.urls),
        path('ckeditor/', include('ckeditor_uploader.urls')),
        path('djeym/', include('djeym.urls', namespace='djeym')),
        ...
    ] + static(
        settings.STATIC_URL,
        document_root=settings.STATIC_ROOT
    ) + static(
        settings.MEDIA_URL,
        document_root=settings.MEDIA_ROOT
    )

Add media directory to your project
-----------------------------------

    media/uploads

Update Migrations
-----------------

    python manage.py migrate djeym

Usage
-----
1) Добавьте иконку кластера. ( *Add Cluster Icon.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. `Скачайте коллекцию кластеров. (Download the cluster collection.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Cluster_Collection.zip?raw=true>`_
2. **Ознакомьтесь с содержимым архива.** ( *Read the contents of the archive.* )
3. **Выберите иконку кластера и добавьте по адресу - Панель администратора > ЯНДЕКС КАРТЫ > Иконки для кластеров > Добавить Иконку для кластеров.**
   ( *Select the cluster icon and add it to the address - Admin Panel > YANDEX MAPS > Icons for Clusters > Add Icon for Clusters.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/add_cluster.png?raw=true
   :alt: Add Cluster

2) Добавьте коллекцию маркеров. ( *Add a collection of markers.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. `Скачайте коллекцию маркеров. (Download the marker collection.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Marker_Collection.zip?raw=true>`_
2. **Ознакомьтесь с содержимым архива.** ( *Read the contents of the archive.* )
3. **Прочитайте readme файл, выберите коллекцию и добавьте через панель администратора.**
   ( *Read the readme file, select the collection and add it through the admin panel.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/import_icon_collection.png?raw=true
   :alt: Import the Marker Collection

**Добавляя собственные иконки, проверяйте смещение по эталону.** ( *By adding your own icons, check the offset by standard.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/offset_icon_for_markers.png?raw=true
   :alt: Check marker icon offset

3) Добавьте источники тайловых слоев. ( *Add tile sources.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. `Скачайте источники тайловых слоев. (Download tile sources.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Tile.zip?raw=true>`_
2. **Ознакомьтесь с содержимым архива.** ( *Read the contents of the archive.* )
3. **Прочитайте readme файл и добавьте источники через панель администратора.** ( *Read the readme file and add sources through the admin panel.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/import_tile_sources.png?raw=true
   :alt: Import the Tile Sources

4) Добавьте иконку индикатора загрузки. ( *Add loading indicator icon.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. `Скачайте иконки для индикатора загрузки. (Download the icon for the loading indicator.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Spinner.zip?raw=true>`_
2. **Ознакомьтесь с содержимым архива.** ( *Read the contents of the archive.* )
3. **Прочитайте readme файл и добавьте иконку через панель администратора.** ( *Read the readme file and add the icon through the admin panel.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/add_loading_indicator.png?raw=true
   :alt: Add Loading Indicator

5) Создайте вашу первую карту. ( *Create your first map.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. **Перейдите по адресу - Панель администратора > ЯНДЕКС КАРТЫ >  Карты > Добавить Карту.**
   ( *Navigate to the address - Admin Panel > YANDEX MAPS > Maps > Add Map.* )

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/create_map.png?raw=true
   :alt: Create map

6) Редактировать карту. ( *Edit map.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/edit_map.png?raw=true
   :alt: Edit map

Обзор страницы редактора. ( *Editor page overview.* )
-----------------------------------------------------

1) Меню редактора - Фильтры по категориям. ( *Editor Menu - Filters by category.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_filters.png?raw=true
   :alt: Editor Menu - Filters by category

2) Меню редактора - Источники тайлов. ( *Editor Menu - Tile Sources.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_tile.png?raw=true
   :alt: Editor Menu - Tile Sources

3) Меню редактора - Общие настройки. ( *Editor Menu - General settings.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_general_settings.png?raw=true
   :alt: Editor Menu - General settings

4) Меню редактора - Элементы управления. ( *Editor Menu - Controls.* )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_controls.png?raw=true
   :alt: Editor Menu - Controls

5) Меню редактора - Настройки тепловой карты. (*Editor Menu - Heatmap settings.*)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_heatmap.png?raw=true
   :alt: Editor Menu - Heatmap settings

6) Меню редактора - Индикаторы загрузки. (*Editor Menu - Loading indicators.*)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_loading_indicators.png?raw=true
   :alt: Editor Menu - Loading indicators

Добавление геообъектов на карту. ( *Adding geo-objects to the map.* )
---------------------------------------------------------------------

- **(ru)** Левый клик на карте, откроется меню с предложением выбрать тип объекта.
- **(en)** Left-clicking on the map opens a menu with a suggestion to choose the type of object.

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/adding_geo_objects.png?raw=true
   :alt: Adding geo-objects

- **(ru)** Маркер - Сменить иконку.
- **(en)** Marker - Change icon.

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/marker_change_icon.png?raw=true
   :alt: Marker - Change icon

- **(ru)** Пример маршрута на карте.
- **(en)** Example route on the map.

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/example_route.png?raw=true
   :alt: Example of the route

- **(ru)** Пример территории на карте.
- **(en)** An example of the territory on the map.

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/example_territory.png?raw=true
   :alt: Example of the territory

Выводим карту на страницу сайта. ( *Display a map on the site page.* )
----------------------------------------------------------------------

Добавьте в шаблон. ( Add to template. )::

    {% load i18n static djeymtags %}

    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">

      <!-- START VENDORS CSS -->
      <!-- Roboto Font:
            Usage (css):
              font-size: 16px;
              font-family: Roboto, sans-serif !important;
              font-weight: 100|300|400|500|700|900;
              font-style: italic!important; -->
      <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
      <!-- Material Design Icons:
            url: https://materialdesignicons.com/
            Usage (html):
              <span class="mdi mdi-name"></span>
              Size: mdi-18px|mdi-24px|mdi-36px|mdi-48px or font-size: 16px;
              Rotate: mdi-rotate-45|mdi-rotate-90|mdi-rotate-135|mdi-rotate-180|mdi-rotate-225|mdi-rotate-270|mdi-rotate-315
              Flip: mdi-flip-h|mdi-flip-v
              Color: mdi-light|mdi-light mdi-inactive|mdi-dark|mdi-dark mdi-inactive or color: #212121; -->
      <link href="https://cdn.jsdelivr.net/npm/@mdi/font@7.x/css/materialdesignicons.min.css" rel="stylesheet">
      <!-- END VENDORS CSS -->
    </head>

    <body>
      <!-- START MAP -->
      <!-- Buttons are optional.
           (Кнопки не являются обязательными.) -->
      <style type="text/css">
        .djeym-button {
          font-family: Roboto, sans-serif !important;
          background-color: #4CAF50;
          border: none;
          color: white;
          padding: 10px 24px;
          text-align: center;
          text-decoration: none;
          display: inline-block;
          font-size: 16px;
          margin: 4px 2px;
          cursor: pointer;
        }
        .djeym-button-bar {
          display: none;
          margin-bottom: 10px;
        }
      </style>
      <div class="djeym-button-bar">
        <button id="djeym-open-panel" type="button" class="djeym-button">
          <span class="mdi mdi-arrow-expand-right"></span>
          Open Panel
        </button>
        <button id="djeym-add-marker" type="button" class="djeym-button">
          <span class="mdi mdi-map-marker-plus"></span>
          Add Marker
        </button>
      </div>
      <div id="djeym-app" class="djeym"></div>
      <!-- END MAP -->

      <!-- START VENDORS JS -->
      <script type="text/javascript" src="{% static "djeym/js/jquery.min.js" %}"></script>
      <script src="{% static "djeym/js/jquery-regex.min.js" %}"></script>
      ...
      {% djeym_yandex_map slug='test-map' lang=request.LANGUAGE_CODE %}
      <!-- END VENDORS JS -->
    </body>

Карта с открытой панелью. ( *Map with open panel.* )
----------------------------------------------------

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/map_opened_panel.png?raw=true
    :alt: Map with open panel

Карта с открытой формой для добавления пользовательских маркеров. ( *Map with an open form for adding custom markers.* )
------------------------------------------------------------------------------------------------------------------------

- **(ru)** Для безопасности, в названии и описании, все html теги удаляются.
- **(en)** For security, in the title and description, all html tags are deleted.

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/map_opened_form.png?raw=true
    :alt: Map with open form

Действия администратора после успешной модерации. ( *Admin actions after successful moderation.* )
------------------------------------------------------------------------------------------------------------------------

.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/after_successful_moderation.png?raw=true
    :alt: After successful moderation

Уведомление о новом пользовательском маркере. ( *Notification of a new custom marker.* )
----------------------------------------------------------------------------------------

Add in views.py::

    from django.core.mail import send_mail
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from djeym.models import Placemark
    
    # SIMPLE EXAMPLE.
    # 1. Notify administrator of a new custom marker.
    # 2. Notify user about successful moderation of his marker.
    # Mail server for testings: $ python -m smtpd -n -c DebuggingServer localhost:1025
    @receiver(post_save, sender=Placemark)
    def notify_email(instance, **kwargs):
        """Notify by email of a new custom marker."""
    
        """
        # May come in handy. (Может пригодится.)
        title = instance.header  # (html)
        description = instance.body  # (html)
        image_url = instance.user_image.url
        """
        # Notify administrator of a new custom marker.
        if instance.is_user_marker and not instance.is_sended_admin_email:
            subject = 'Text subject'
            message = 'Text message - Url: ' + \
                'http(s)://your.domain/admin/djeym/placemark/{}/change/'.format(instance.pk)
            from_email = 'admin@site.net'  # or corporate email
            recipient_list = ['admin@site.net']  # Your work email
            send_mail(subject, message, from_email,
                      recipient_list, fail_silently=False)
            # Required
            instance.is_sended_admin_email = True
            instance.save()
        # Notify user about successful moderation of his marker.
        elif instance.active and instance.is_user_marker and not instance.is_sended_user_email:
            subject = 'Text subject'
            message = 'Text message'
            from_email = 'admin@site.net'  # Your work email
            recipient_list = [instance.user_email]
            send_mail(subject, message, from_email,
                      recipient_list, fail_silently=False)
            # Required
            instance.is_sended_user_email = True
            instance.save()

LICENSE
-------
- `MIT License <https://github.com/kebasyaty/django-editor-ymaps/blob/master/LICENSE>`_
- Copyright (c) 2014 kebasyaty

CHANGELOG
---------
`View the change history. <https://github.com/kebasyaty/django-editor-ymaps/blob/master/CHANGELOG.rst>`_

.. contents:: Contents
   :depth: 3

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/kebasyaty/django-editor-ymaps",
    "name": "django-editor-ymaps",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "django, yandex, maps, admin, editor",
    "author": "kebasyaty",
    "author_email": "kebasyaty@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/d3/9d/81279a2295ecfd02bf0dd93bc5ec0c8e403e43ec6c0d1f7fe9cc3e67c536/django_editor_ymaps-2.3.11.tar.gz",
    "platform": "any",
    "description": ".. figure:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/logo.png?raw=true\n   :target: https://pypi.org/project/django-editor-ymaps/\n   :alt: Logo\n\n|\n\n.. image:: https://img.shields.io/badge/pypi-v24.0%20-blue.svg\n   :target: https://pypi.org/project/pip/\n   :alt: PyPI badge\n.. image:: https://img.shields.io/badge/python-%3E%3D%203.12-yellow.svg\n   :target: https://www.python.org/\n   :alt: Python badge\n.. image:: https://img.shields.io/badge/django-%3E%3D%205.0-brightgreen.svg\n   :target: https://www.djangoproject.com/\n   :alt: Django badge\n.. image:: https://pepy.tech/badge/django-editor-ymaps\n   :target: https://pepy.tech/project/django-editor-ymaps\n   :alt: Downloads badge\n.. image:: https://img.shields.io/github/license/mashape/apistatus.svg\n   :target: https://github.com/kebasyaty/django-editor-ymaps/blob/master/LICENSE\n   :alt: MIT badge\n\nDjEYM ( django-editor-ymaps )\n=============================\n- **(ru)** *\u0423\u0434\u043e\u0431\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043b\u044f \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Django.*\n- **(en)** *Convenient use of the Yandex map service for web development on the popular and free Django framework.*\n\n\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f API \u042f\u043d\u0434\u0435\u043a\u0441.\u041a\u0430\u0440\u0442\n--------------------------------------------------------------------\n- **(ru)** `\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041a\u0430\u0440\u0442 <https://tech.yandex.ru/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_\n- **(ru)** `\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c API-\u043a\u043b\u044e\u0447 <https://tech.yandex.ru/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_\n\nTerms of use for the API\n--------------------------------------------------------------------\n- **(en)** `Terms of use for the Yandex.Maps <https://tech.yandex.com/maps/jsapi/doc/2.1/terms/index-docpage/>`_\n- **(en)** `Get the API key <https://tech.yandex.com/maps/jsapi/doc/2.1/quick-start/index-docpage/#get-api-key>`_\n\n|\n\nRequirements\n------------\n- **Python** >= 3.12\n- **Django** >= 5.0\n- **Pillow** - `https://pypi.org/project/Pillow/ <https://pypi.org/project/Pillow/>`_\n- **django-imagekit** - `https://github.com/matthewwithanm/django-imagekit <https://github.com/matthewwithanm/django-imagekit>`_\n- **python-slugify** - `https://github.com/un33k/python-slugify <https://github.com/un33k/python-slugify>`_\n- **django-ckeditor** - `https://github.com/django-ckeditor/django-ckeditor <https://github.com/django-ckeditor/django-ckeditor>`_\n- **lxml** - `https://pypi.org/project/lxml/ <https://pypi.org/project/lxml/>`_\n- **django-ipware** - `https://github.com/un33k/django-ipware <https://github.com/un33k/django-ipware>`_\n- **django-colorful** - `<https://pypi.org/project/django-colorful/>`_\n- **django-admin-sortable** - `<https://pypi.org/project/django-admin-sortable/>`_\n-\n- **Vue.js** - `<https://vuejs.org/>`_\n- **Vuetify.js** - `<https://vuetifyjs.com/>`_\n\nInstallation\n------------\nInstall libraries ( Ubuntu >= 18.04, Mint >= 19.x )::\n\n    sudo apt install -y python3-dev libevent-dev build-essential libpq-dev libxml2-dev libxslt1-dev gettext libjpeg-dev python3-setuptools\n\nInstall libraries ( Fedora >= 38 )::\n\n    sudo dnf install python3-devel python3-setuptools libevent-devel libpq-devel libxml2-devel libxslt-devel libjpeg-turbo-devel gettext\n\nInstall django-editor-ymaps using pip::\n\n    pip install django-editor-ymaps\n\nSettings\n--------\n\nAdd settings::\n\n    import os\n    \n    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)\n    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\n    INSTALLED_APPS = [\n        ...\n        'imagekit',\n        'ckeditor',\n        'ckeditor_uploader',\n        'colorful',\n        'adminsortable',\n        'djeym',\n        ...\n    ]\n\n    MIDDLEWARE = [\n        ...\n        'django.middleware.locale.LocaleMiddleware',\n        'djeym.middlewares.AjaxMiddleware',\n    ]\n\n    # Static files (CSS, JavaScript, Images)\n    # https://docs.djangoproject.com/en/3.0/howto/static-files/\n    STATIC_URL = '/static/'\n    STATIC_ROOT = os.path.join(BASE_DIR, 'static')\n    \n    MEDIA_URL = '/media/'\n    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\n    # To send test messages.\n    # 1. Notify administrator of a new custom marker.\n    # 2. Notify user about successful moderation of his marker.\n    # Mail server for testings: $ python -m smtpd -n -c DebuggingServer localhost:1025\n    EMAIL_HOST = 'localhost'\n    EMAIL_PORT = 1025\n    EMAIL_HOST_USER = ''\n    EMAIL_HOST_PASSWORD = ''\n    EMAIL_USE_TLS = False\n    DEFAULT_FROM_EMAIL = 'noreply@site.net'\n\n    # django-ckeditor\n    # https://github.com/django-ckeditor/django-ckeditor\n    CKEDITOR_BASEPATH = '/static/ckeditor/ckeditor/'\n    CKEDITOR_UPLOAD_PATH = 'uploads/'\n    CKEDITOR_FILENAME_GENERATOR = 'djeym.utils.get_filename'\n    CKEDITOR_THUMBNAIL_SIZE = (300, 300)\n    CKEDITOR_FORCE_JPEG_COMPRESSION = True\n    CKEDITOR_IMAGE_QUALITY = 40\n    CKEDITOR_IMAGE_BACKEND = 'pillow'\n    CKEDITOR_ALLOW_NONIMAGE_FILES = False  # False - Only image files. (At your discretion)\n    CKEDITOR_CONFIGS = {\n        'default': {\n            'toolbar': 'full',\n            'height': 400,\n            'width': '100%',\n        },\n        'djeym': {\n            'toolbar': 'full',\n            'height': 400,\n            'width': 362,\n            'colorButton_colors': 'F44336,C62828,E91E63,AD1457,9C27B0,6A1B9A,'\n                                  '673AB7,4527A0,3F51B5,283593,2196F3,1565C0,'\n                                  '03A9F4,0277BD,00BCD4,00838F,009688,00695C,'\n                                  '4CAF50,2E7D32,8BC34A,558B2F,CDDC39,9E9D24,'\n                                  'FFEB3B,F9A825,FFC107,FF8F00,FF9800,EF6C00,'\n                                  'FF5722,D84315,795548,4E342E,607D8B,37474F,'\n                                  '9E9E9E,424242,000000,FFFFFF',\n            'colorButton_enableAutomatic': False,\n            'colorButton_enableMore': True\n        }\n    }\n    \n    # (If a non-authenticated user requests an editor page.)\n    # (\u0415\u0441\u043b\u0438 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.)\n    LOGIN_URL = '/admin/'  # or change to your URL\n    \n    # Required for django-admin-sortable\n    # https://github.com/alsoicode/django-admin-sortable#configuration\n    CSRF_COOKIE_HTTPONLY = False\n    \n    # The API key is used in the free and paid versions.\n    # You can get the key in the developer\u2019s office - https://passport.yandex.com/\n    # ( API-\u043a\u043b\u044e\u0447 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0438 \u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.\n    #   \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u043d\u043e \u0432 \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 - https://developer.tech.yandex.ru/ )\n    DJEYM_YMAPS_API_KEY = ''\n    \n    # For paid use API --> True\n    # ( \u0414\u043b\u044f \u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f --> True )\n    DJEYM_YMAPS_API_KEY_FOR_ENTERPRISE = False\n    \n    # Map download mode. Default = 'release'\n    # (\u0420\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442.)\n    # DJEYM_YMAPS_DOWNLOAD_MODE = 'debug' if DEBUG else 'release'\n\nAdd to main URLs\n----------------\n\nurls.py::\n\n    from django.contrib import admin\n    from django.urls import path, include\n    from django.conf import settings\n    from django.contrib.staticfiles.urls import static\n    \n    urlpatterns = [\n        ...\n        path('admin/', admin.site.urls),\n        path('ckeditor/', include('ckeditor_uploader.urls')),\n        path('djeym/', include('djeym.urls', namespace='djeym')),\n        ...\n    ] + static(\n        settings.STATIC_URL,\n        document_root=settings.STATIC_ROOT\n    ) + static(\n        settings.MEDIA_URL,\n        document_root=settings.MEDIA_ROOT\n    )\n\nAdd media directory to your project\n-----------------------------------\n\n    media/uploads\n\nUpdate Migrations\n-----------------\n\n    python manage.py migrate djeym\n\nUsage\n-----\n1) \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. ( *Add Cluster Icon.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n1. `\u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. (Download the cluster collection.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Cluster_Collection.zip?raw=true>`_\n2. **\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u0430.** ( *Read the contents of the archive.* )\n3. **\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 - \u041f\u0430\u043d\u0435\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 > \u042f\u041d\u0414\u0415\u041a\u0421 \u041a\u0410\u0420\u0422\u042b > \u0418\u043a\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 > \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0418\u043a\u043e\u043d\u043a\u0443 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432.**\n   ( *Select the cluster icon and add it to the address - Admin Panel > YANDEX MAPS > Icons for Clusters > Add Icon for Clusters.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/add_cluster.png?raw=true\n   :alt: Add Cluster\n\n2) \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432. ( *Add a collection of markers.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n1. `\u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432. (Download the marker collection.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Marker_Collection.zip?raw=true>`_\n2. **\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u0430.** ( *Read the contents of the archive.* )\n3. **\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 readme \u0444\u0430\u0439\u043b, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.**\n   ( *Read the readme file, select the collection and add it through the admin panel.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/import_icon_collection.png?raw=true\n   :alt: Import the Marker Collection\n\n**\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u044d\u0442\u0430\u043b\u043e\u043d\u0443.** ( *By adding your own icons, check the offset by standard.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/offset_icon_for_markers.png?raw=true\n   :alt: Check marker icon offset\n\n3) \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u043b\u043e\u0435\u0432. ( *Add tile sources.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n1. `\u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u043b\u043e\u0435\u0432. (Download tile sources.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Tile.zip?raw=true>`_\n2. **\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u0430.** ( *Read the contents of the archive.* )\n3. **\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 readme \u0444\u0430\u0439\u043b \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.** ( *Read the readme file and add sources through the admin panel.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/import_tile_sources.png?raw=true\n   :alt: Import the Tile Sources\n\n4) \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. ( *Add loading indicator icon.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n1. `\u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. (Download the icon for the loading indicator.) <https://github.com/kebasyaty/django-editor-ymaps/blob/master/Spinner.zip?raw=true>`_\n2. **\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u0430.** ( *Read the contents of the archive.* )\n3. **\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 readme \u0444\u0430\u0439\u043b \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.** ( *Read the readme file and add the icon through the admin panel.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/add_loading_indicator.png?raw=true\n   :alt: Add Loading Indicator\n\n5) \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u0430\u0448\u0443 \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443. ( *Create your first map.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n1. **\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 - \u041f\u0430\u043d\u0435\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 > \u042f\u041d\u0414\u0415\u041a\u0421 \u041a\u0410\u0420\u0422\u042b >  \u041a\u0430\u0440\u0442\u044b > \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u041a\u0430\u0440\u0442\u0443.**\n   ( *Navigate to the address - Admin Panel > YANDEX MAPS > Maps > Add Map.* )\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/create_map.png?raw=true\n   :alt: Create map\n\n6) \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443. ( *Edit map.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/edit_map.png?raw=true\n   :alt: Edit map\n\n\u041e\u0431\u0437\u043e\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. ( *Editor page overview.* )\n-----------------------------------------------------\n\n1) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c. ( *Editor Menu - Filters by category.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_filters.png?raw=true\n   :alt: Editor Menu - Filters by category\n\n2) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0430\u0439\u043b\u043e\u0432. ( *Editor Menu - Tile Sources.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_tile.png?raw=true\n   :alt: Editor Menu - Tile Sources\n\n3) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. ( *Editor Menu - General settings.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_general_settings.png?raw=true\n   :alt: Editor Menu - General settings\n\n4) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. ( *Editor Menu - Controls.* )\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_controls.png?raw=true\n   :alt: Editor Menu - Controls\n\n5) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. (*Editor Menu - Heatmap settings.*)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_heatmap.png?raw=true\n   :alt: Editor Menu - Heatmap settings\n\n6) \u041c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. (*Editor Menu - Loading indicators.*)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/editor_menu_loading_indicators.png?raw=true\n   :alt: Editor Menu - Loading indicators\n\n\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. ( *Adding geo-objects to the map.* )\n---------------------------------------------------------------------\n\n- **(ru)** \u041b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044e \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430.\n- **(en)** Left-clicking on the map opens a menu with a suggestion to choose the type of object.\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/adding_geo_objects.png?raw=true\n   :alt: Adding geo-objects\n\n- **(ru)** \u041c\u0430\u0440\u043a\u0435\u0440 - \u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443.\n- **(en)** Marker - Change icon.\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/marker_change_icon.png?raw=true\n   :alt: Marker - Change icon\n\n- **(ru)** \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.\n- **(en)** Example route on the map.\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/example_route.png?raw=true\n   :alt: Example of the route\n\n- **(ru)** \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.\n- **(en)** An example of the territory on the map.\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/example_territory.png?raw=true\n   :alt: Example of the territory\n\n\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u0430\u0439\u0442\u0430. ( *Display a map on the site page.* )\n----------------------------------------------------------------------\n\n\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d. ( Add to template. )::\n\n    {% load i18n static djeymtags %}\n\n    <head>\n      <meta charset=\"utf-8\">\n      <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui\">\n\n      <!-- START VENDORS CSS -->\n      <!-- Roboto Font:\n            Usage (css):\n              font-size: 16px;\n              font-family: Roboto, sans-serif !important;\n              font-weight: 100|300|400|500|700|900;\n              font-style: italic!important; -->\n      <link href=\"https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900\" rel=\"stylesheet\">\n      <!-- Material Design Icons:\n            url: https://materialdesignicons.com/\n            Usage (html):\n              <span class=\"mdi mdi-name\"></span>\n              Size: mdi-18px|mdi-24px|mdi-36px|mdi-48px or font-size: 16px;\n              Rotate: mdi-rotate-45|mdi-rotate-90|mdi-rotate-135|mdi-rotate-180|mdi-rotate-225|mdi-rotate-270|mdi-rotate-315\n              Flip: mdi-flip-h|mdi-flip-v\n              Color: mdi-light|mdi-light mdi-inactive|mdi-dark|mdi-dark mdi-inactive or color: #212121; -->\n      <link href=\"https://cdn.jsdelivr.net/npm/@mdi/font@7.x/css/materialdesignicons.min.css\" rel=\"stylesheet\">\n      <!-- END VENDORS CSS -->\n    </head>\n\n    <body>\n      <!-- START MAP -->\n      <!-- Buttons are optional.\n           (\u041a\u043d\u043e\u043f\u043a\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438.) -->\n      <style type=\"text/css\">\n        .djeym-button {\n          font-family: Roboto, sans-serif !important;\n          background-color: #4CAF50;\n          border: none;\n          color: white;\n          padding: 10px 24px;\n          text-align: center;\n          text-decoration: none;\n          display: inline-block;\n          font-size: 16px;\n          margin: 4px 2px;\n          cursor: pointer;\n        }\n        .djeym-button-bar {\n          display: none;\n          margin-bottom: 10px;\n        }\n      </style>\n      <div class=\"djeym-button-bar\">\n        <button id=\"djeym-open-panel\" type=\"button\" class=\"djeym-button\">\n          <span class=\"mdi mdi-arrow-expand-right\"></span>\n          Open Panel\n        </button>\n        <button id=\"djeym-add-marker\" type=\"button\" class=\"djeym-button\">\n          <span class=\"mdi mdi-map-marker-plus\"></span>\n          Add Marker\n        </button>\n      </div>\n      <div id=\"djeym-app\" class=\"djeym\"></div>\n      <!-- END MAP -->\n\n      <!-- START VENDORS JS -->\n      <script type=\"text/javascript\" src=\"{% static \"djeym/js/jquery.min.js\" %}\"></script>\n      <script src=\"{% static \"djeym/js/jquery-regex.min.js\" %}\"></script>\n      ...\n      {% djeym_yandex_map slug='test-map' lang=request.LANGUAGE_CODE %}\n      <!-- END VENDORS JS -->\n    </body>\n\n\u041a\u0430\u0440\u0442\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e. ( *Map with open panel.* )\n----------------------------------------------------\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/map_opened_panel.png?raw=true\n    :alt: Map with open panel\n\n\u041a\u0430\u0440\u0442\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432. ( *Map with an open form for adding custom markers.* )\n------------------------------------------------------------------------------------------------------------------------\n\n- **(ru)** \u0414\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438, \u0432\u0441\u0435 html \u0442\u0435\u0433\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.\n- **(en)** For security, in the title and description, all html tags are deleted.\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/map_opened_form.png?raw=true\n    :alt: Map with open form\n\n\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u0438. ( *Admin actions after successful moderation.* )\n------------------------------------------------------------------------------------------------------------------------\n\n.. image:: https://github.com/kebasyaty/django-editor-ymaps/blob/master/screenshots_v3/after_successful_moderation.png?raw=true\n    :alt: After successful moderation\n\n\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u0435. ( *Notification of a new custom marker.* )\n----------------------------------------------------------------------------------------\n\nAdd in views.py::\n\n    from django.core.mail import send_mail\n    from django.db.models.signals import post_save\n    from django.dispatch import receiver\n    from djeym.models import Placemark\n    \n    # SIMPLE EXAMPLE.\n    # 1. Notify administrator of a new custom marker.\n    # 2. Notify user about successful moderation of his marker.\n    # Mail server for testings: $ python -m smtpd -n -c DebuggingServer localhost:1025\n    @receiver(post_save, sender=Placemark)\n    def notify_email(instance, **kwargs):\n        \"\"\"Notify by email of a new custom marker.\"\"\"\n    \n        \"\"\"\n        # May come in handy. (\u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.)\n        title = instance.header  # (html)\n        description = instance.body  # (html)\n        image_url = instance.user_image.url\n        \"\"\"\n        # Notify administrator of a new custom marker.\n        if instance.is_user_marker and not instance.is_sended_admin_email:\n            subject = 'Text subject'\n            message = 'Text message - Url: ' + \\\n                'http(s)://your.domain/admin/djeym/placemark/{}/change/'.format(instance.pk)\n            from_email = 'admin@site.net'  # or corporate email\n            recipient_list = ['admin@site.net']  # Your work email\n            send_mail(subject, message, from_email,\n                      recipient_list, fail_silently=False)\n            # Required\n            instance.is_sended_admin_email = True\n            instance.save()\n        # Notify user about successful moderation of his marker.\n        elif instance.active and instance.is_user_marker and not instance.is_sended_user_email:\n            subject = 'Text subject'\n            message = 'Text message'\n            from_email = 'admin@site.net'  # Your work email\n            recipient_list = [instance.user_email]\n            send_mail(subject, message, from_email,\n                      recipient_list, fail_silently=False)\n            # Required\n            instance.is_sended_user_email = True\n            instance.save()\n\nLICENSE\n-------\n- `MIT License <https://github.com/kebasyaty/django-editor-ymaps/blob/master/LICENSE>`_\n- Copyright (c) 2014 kebasyaty\n\nCHANGELOG\n---------\n`View the change history. <https://github.com/kebasyaty/django-editor-ymaps/blob/master/CHANGELOG.rst>`_\n\n.. contents:: Contents\n   :depth: 3\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Creating and editing Yandex maps.",
    "version": "2.3.11",
    "project_urls": {
        "Download": "https://github.com/kebasyaty/django-editor-ymaps/tarball/master",
        "Homepage": "https://github.com/kebasyaty/django-editor-ymaps"
    },
    "split_keywords": [
        "django",
        " yandex",
        " maps",
        " admin",
        " editor"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d39d81279a2295ecfd02bf0dd93bc5ec0c8e403e43ec6c0d1f7fe9cc3e67c536",
                "md5": "b3e11df1ffb2ae945c02b070e3101d87",
                "sha256": "30d54d407149b51ec739e819171fbe1a6dc0ce54691dce523fb2f5f0426f4d2b"
            },
            "downloads": -1,
            "filename": "django_editor_ymaps-2.3.11.tar.gz",
            "has_sig": false,
            "md5_digest": "b3e11df1ffb2ae945c02b070e3101d87",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 767600,
            "upload_time": "2024-05-28T14:32:08",
            "upload_time_iso_8601": "2024-05-28T14:32:08.295176Z",
            "url": "https://files.pythonhosted.org/packages/d3/9d/81279a2295ecfd02bf0dd93bc5ec0c8e403e43ec6c0d1f7fe9cc3e67c536/django_editor_ymaps-2.3.11.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-28 14:32:08",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "kebasyaty",
    "github_project": "django-editor-ymaps",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "django-editor-ymaps"
}
        
Elapsed time: 3.38669s