我有一个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)的排列。
有什么主意吗?
{% 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,即可在leaflet_map库内打印settings_overrides并查看是否传递了正确的格式。如我所说,我认为正确的格式是带有xmin,ymin,xmax,ymax元组的字典。
settings_overrides = {'SPATIAL_EXTENT':(-154.609,1.561,-40.611,65.921)}