难以将 maptile 作为上下文直接传递到 Django 中的 Leaflet 地图 tilelayer

Difficulty passing a maptile as context directly into a Leaflet map tilelayer in Django

我有一个网页,其中嵌入了 Leaflet 地图。我已经成功地为用户创建了一个下拉列表,从 Maptiler.com 到 select 不同的 maptile 类型。这与 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 显示得很好 - 请参阅我的打印。

The maptile works fine when it is hardcoded into the the tileLayer() method

你也可以看到我顺利通过了 {{ context.maptilefullkey }} 到模板,成功打印在网页底部。它显然与有效密钥完全匹配。

但是当我将它作为变量传递时 L.tileLayer({{ context.maptilefullkey }}).addTo(map);,maptile 完全消失了。

为什么会发生这种情况,我该如何解决?

字符串以大括号结尾,然后位于关闭上下文的双大括号之前是否会产生问题? 还是归因导致了问题?

非常感谢这个社区的帮助!

Phil #anoobinneed

最后我设法解决了这个问题。这是我对这方面相当陌生的一部分。

我需要将标签 "safe" 添加到从以下位置获取完整密钥的位置:-

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

它以前只传递 tileaddress 时有效,但显然全键有一个或多个 "unsafe" 个字符,我需要指示模板按原样传递字符串。

这在文档中解释得很好:-

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

我希望这对以后的人有所帮助。

菲尔