Резюме
У меня есть проект 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: '©
<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)}