我正在尝试在我的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 %}
答案 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