Django:在谷歌地图的 javascript 中使用模板标签

Posted

技术标签:

【中文标题】Django:在谷歌地图的 javascript 中使用模板标签【英文标题】:Django: using template tags inside of javascript for Google Maps 【发布时间】:2017-08-22 03:06:03 【问题描述】:

我正在尝试在我的 javascript 中使用模板标签使其动态化并根据发送的地址加载地图。我的地图正在运行,我的地理编码也在运行。我什至可以将纬度和经度传递给模板,但是当我将它放在 javascritp 中时,它无法按预期工作。

例如:

如果 html 中的 longitude 是 -122,0843845,我的警报(longitude)只有 -122。似乎我在 Django 将点转换为逗号时出现问题,例如 -122.08... 到 -122,08。无论哪种方式,即使我尝试使用像 -122 这样的整数,它也不起作用。

不确定是浮动到字符串问题还是其他问题,我对 javascript 很陌生。

代码。

views.py

类 ImovelDetail(DetailView): 模型 = Imovel

def get_context_data(self, *args, **kwargs):
    address = "1600 Amphitheatre Parkway, Mountain View, CA"
    api_key = "AIzaSyAiw0iU0egdeVrOKboOOZ2n1WXS3Os0WgI"
    api_response = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address=0&key=1'.format(address, api_key))
    api_response_dict = api_response.json()

    if api_response_dict['status'] == 'OK':
        context = super(ImovelDetail, self).get_context_data(**kwargs)
        latitude = api_response_dict['results'][0]['geometry']['location']['lat']
        longitude  = api_response_dict['results'][0]['geometry']['location']['lng']
        print(latitude)
        context.update('latitude': latitude, 'longitude': longitude)
        return context

模板.html

% block js %
    <!-- <script>
    SOMETHING THAT I TRIED
        var latitude =  latitude ;
        var longitude =  longitude ;
    </script> -->
    <script>
    function initMap() 
        var address = lat: latitude, lng:longitude ;

        var map = new google.maps.Map(document.getElementById('map'), 
          zoom: 15,
          center: address
        );
        var marker = new google.maps.Marker(
          position: address,
          map: map
        );
    
    </script>
    <script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAiw0iU0egdeVrOKboOOZ2n1WXS3Os0WgI&callback=initMap"></script>
% endblock %

【问题讨论】:

【参考方案1】:

这是因为 javascript 在十进制数字中使用点。因此,如果您将数字传递给 javascript,则需要使用点。像这样:159.0857 如果你用逗号传递它,javascript 会舍入它

如果您使用带逗号的坐标(这不是很好的方法)。然后你需要替换逗号。也许是custom filter。但我怎么说。使用带点的十进制数字会更好。

当然,如果页面上有一些对象,您可以将坐标(带点)分配给 html 元素。

<p class="address" latitude="49.055" longitude="40.808">Your address</p>

然后您可以通过 JQuery 或 javascript 获取此值。

如果您的 lat 和 lon 中有逗号,则必须先替换它。在你看来试试这个:

return context.update('latitude': float(latitude.replace(',','.')), 'longitude': float(longitude.replace(',','.'))

已编辑 可能导致这个问题的最后一件事(你说在你的标准输出上没问题)是本地化。检查这个answer

你必须设置USE_L10N=False

【讨论】:

我试过这样context.update('latitude': float(latitude), 'longitude': float(longitude)) 它以虚线浮动的形式打印到终端,并且在模板中显示为逗号。我也尝试过像 122 这样的常规整数,但没有任何效果。 最后一次尝试对我来说有意义的是本地化。试试附加的链接。 我明白了!你的回答很有帮助!将它作为字符串传递是有效的。我在视图中添加了latitude = str(latitude)longitude = str(longitude),它对javascript 没问题。 我对你帮助不大,但很高兴听到它:-) 这可能是本地化问题。这将是解决方法,以字符串形式发送。您应该尝试设置本地化。

以上是关于Django:在谷歌地图的 javascript 中使用模板标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript在谷歌地图中的多个标记之间绘制路线图

在谷歌地图javascript api中 - 如何移动地图而不是标记

如何在 asp.net 页面中使用 javascript 在谷歌地图上显示点?

如何使用 Google Maps JavaScript API v3 在谷歌地图中获取查看区域中心的坐标

在谷歌地图上画一个凸包

如何在谷歌地图的屏幕中心设置标记