Сложность передачи карты в качестве контекста непосредственно в слой листов карты Leaflet в Django - PullRequest
0 голосов
/ 29 января 2020

У меня есть веб-страница со встроенной картой Leaflet. Мне удалось создать раскрывающийся список для пользователя, чтобы выбрать различные типы карт на Maptiler.com. Это работало нормально, когда адрес maptile передавался в качестве контекста из представления, которое затем было указано в моем шаблоне следующим образом: -

L.tileLayer('{{ context.maptileaddress }}', {attribution: '<a href="https://www.maptiler.com/copyright/" target="_blank">&copy; MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>',}).addTo(map);

Затем я решил, что мог бы использовать других провайдеров maptile, таких как Stamen и это потребовало бы, чтобы я передал весь аргумент tilelayer следующим образом: -

L.tileLayer('{{ context.maptilefullkey }}).addTo(map);

, где действительный 'maptilefullkey' равен: -

'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.{ext}', {
            attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
            subdomains: 'abcd',
            minZoom: 1,
            maxZoom: 18,
            ext: 'png'
            }

Когда я встраиваю этот текст буквально в tileLayer метод, maptile отображает просто отлично - см. мой отпечаток.

Maptile работает нормально, когда он жестко закодирован в метод tileLayer ()

Вы также можете видеть, что Я успешно передал {{ context.maptilefullkey }} в шаблон, и он успешно напечатан внизу веб-страницы. По-видимому, он точно соответствует действительному ключу.

Но когда я передаю его как переменную L.tileLayer({{ context.maptilefullkey }}).addTo(map);, maptile полностью исчезает.

Почему это произошло и как я могу это исправить?

Является ли тот факт, что строка заканчивается фигурной скобкой, а затем предшествует двойной фигурной скобке, которая закрывает контекст, создавая проблему? Или это атрибуция, которая вызывает проблему?

Помощь от этого сообщества высоко ценится!

Phil # anoobinneed

1 Ответ

0 голосов
/ 30 января 2020

Мне удалось решить это в конце концов. Это все часть меня, что я довольно новичок в этом.

Мне нужно было добавить тег «safe» туда, откуда берется полный ключ: -

L.tileLayer({{ context.maptilefullkey | safe }}).addTo(map);

Это работало раньше, когда просто передавался адрес тайла, но очевидно, что у fullkey был «небезопасный» символ или символы, и мне нужно было указать шаблону, чтобы передать строку в точности так, как она есть.

Это хорошо объяснено в документации:

https://docs.djangoproject.com/en/3.0/howto/custom-template-tags/

Я надеюсь, что это может помочь кому-то в будущем.

Фил

...