Как я могу переопределить переменную "settings_overrides" в leaflet_map изнутри шаблона Django - PullRequest
0 голосов
/ 27 января 2019

Резюме

У меня есть проект geodjango для отображения веб-карт. Что я могу сделать без проблем. Тем не менее, я хочу настроить конфигурацию моей карты из моего шаблона django, а не из моих настроек django. (Из настроек Django я могу сделать это хорошо).

Чтобы настроить, я должен передать словарь python в переменную с именем settings_overrides. Проблема в том, что я не могу понять, как и если это возможно из шаблона django.

Описание

Допустим, я хочу переопределить "SPATIAL_EXTENT" внутри кода моего шаблона, где словарь python, которого ожидает leaflet_map, выглядит следующим образом:

ext = {'SPATIAL_EXTENT': (-154.609, 1.561, -40.611, 65.921)}
settings_overrides = ext

Примечание: это то, что я понял !! Я могу быть не прав! Ниже приведена подпись функции leaflet_map.

Это вызывающая функция внутри шаблона (index.html), где я хочу передать новый экстент для setting_overrides:

{% leaflet_map "main" callback="window.map_init_basic" 
                      creatediv=False, settings_overrides=ext %}

                            (A)

И подпись функции leaflet_map, которая находится в: leaflet / templatetags / leaflet_tags.py, выглядит следующим образом:

def leaflet_map(name, callback=None, fitextent=True, creatediv=True,
            loadevent=app_settings.get('LOADEVENT'),
            settings_overrides={}):

    if settings_overrides == '':
        settings_overrides = {}

    instance_app_settings = app_settings.copy()
    instance_app_settings.update(**settings_overrides)  
    ....
                            (B)

Как видно из (B) в подписи, я должен передать отображение из моего шаблона index.html (html + javascript) в вызывающую функцию (A).

Я пытался создать переменную javascript внутри кода следующим образом:

{% block maincontent %}
    <script>
    var text = "\(" + "-154.609,1.561,-40.611,65.921" + "\)";
    var dict = { "SPATIAL_EXTENT": text };
    var ext = JSON.parse(dict);  
    </script>

    {% leaflet_map "main" callback="window.map_init_basic" 
                          creatediv=False, settings_overrides=ext %}
{% endblock %}
                             (C)

Конечно, это не сработало. Приведенный выше код в (C) печатает JavaScript "объект". И когда я печатаю «settings_overrides» внутри кода leaflet_map, я получаю пустой словарь {}. Кажется, ничего не передано в (С).

Я попробовал еще несколько перестановок переменной javascript (в виде строки, как json), которая тоже не работала.

Есть идеи?

index.html code

{% block maincontent %}
    {% leaflet_map "main" callback="window.map_init_basic" 
                          creatediv=False, settings_overrides=?? %}
{% endblock %}


{% block bottom_js %}
    {{ block.super }}
    <script> 
    function map_init_basic(map, options) {
        map.setView([51.505, -0.09], 13);

        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; 
        <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> 
          contributors'
        }).addTo(map);

        L.marker([51.5, -0.09]).addTo(map)
        .bindPopup('A pretty CSS3 popup.')
        .openPopup();
    }
    </script>
{% endblock %}

Ожидаемый результат

Мне нужно только передать любой словарь в leaflet_map, где я могу напечатать settings_overrides внутри библиотеки leaflet_map и увидеть, что передается правильный формат. Как я уже сказал, я думаю, что правильный формат - это словарь с кортежем xmin, ymin, xmax, ymax.

settings_overrides = {'SPATIAL_EXTENT': (-154.609, 1.561, -40.611, 65.921)}

...