如何从Django模板内部覆盖leaflet_map中的“ settings_overrides”变量

时间:2019-01-27 03:11:54

标签: javascript python django geodjango django-leaflet

摘要

我有一个geodjango项目来显示网络地图。我可以毫无问题地做到这一点。但是,我想从django模板而不是django设置中自定义地图配置。 (从Django设置中,我可以做到)。

要进行自定义,我必须将python字典传递给名为settings_overrides的变量。问题是我无法从Django模板中弄清楚如何以及是否有可能。

说明

假设我要在我的模板代码中覆盖“ SPATIAL_EXTENT”,而leaflet_map期望的python词典如下:

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

注意:这是我的理解!!我可能错了!有关leaflet_map函数的签名,请参见下文。

这是在template(index.html)内调用函数,我要将新范围传递给setting_overrides:

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

                            (A)

位于leaflet / templatetags / leaflet_tags.py中的leaflet_map函数的签名如下:

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“对象”。当我在leaflet_map代码中打印“ settings_overrides”时,我得到一个空的字典{}。似乎没有任何东西传递给(C)。

我尝试了一些也不起作用的javascript变量(作为字符串,作为json)的排列。

有什么主意吗?

index.html代码

{% 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,即可在leaflet_map库内打印settings_overrides并查看是否传递了正确的格式。如我所说,我认为正确的格式是带有xmin,ymin,xmax,ymax元组的字典。

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

0 个答案:

没有答案