Django:在javascript中使用模板标签用于Google Maps

时间:2017-03-28 20:54:22

标签: javascript django google-maps django-templates

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

例如:

如果HTML中的{{longitude}}为-122,0843845,我的警报({{longitude}})仅为-122。似乎我在Django中将一个点转换为逗号有问题,比如-122.08 ...到-122,08。无论哪种方式,即使我尝试使用像-122这样的整数,它也不起作用。

不确定它是否是浮点到字符串问题或其他什么,我对javascript很新。

代码。

views.py

类ImovelDetail(DetailView):     model = 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

template.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 个答案:

答案 0 :(得分: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