我正在尝试使用Django模板标记变量将一堆地图标记添加到地图中作为纬度和经度,但事情并不顺利。这是我在视图javascript代码中的内容。我将代码作为外部JS文件加载。这是我必须初始化一切。此外,当我这样做时,谷歌地图甚至没有显示出来。它消失了。
function initialize() {
var latLng = new google.maps.LatLng(41.85, -87.65);
map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 8,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
marker = new google.maps.Marker({
position: latLng,
title: 'Point A',
map: map,
draggable: true
});
// Update current position inf o and load in markers from database
loadMarkers();
updateMarkerPosition(latLng);
geocodePosition(latLng);
这就是loadMarkers()的样子
function loadMarkers(){
{% for mark in latest_marks %}
var point = new google.maps.LatLng({{mark.lat}},{{mark.lng}});
var marker = new google.maps.Marker({
position: point,
map: map,
});
{% endfor %}
}
任何帮助将不胜感激。欢呼声。
答案 0 :(得分:3)
您不能将Django模板标记放在外部javascript文件中。 Django甚至没有看到那些。您的网络服务器直接为客户提供服务。
你可以做的是使用Django生成Javascript变量和数据结构,例如在模板中的<script>
个标签内,然后您的外部JavaScript文件可以引用那些就好了。
E.g。在你的模板中,你可以让Django生成:
<script>var myVar = {something: 42};</script>
然后您的外部JavaScript文件可以使用myVar
。我这么做很多,以自定义外部JavaScript脚本的行为。
而且,正如我在评论中提到的,你有一个逗号:map: map,
。这将产生错误并停止您的脚本。
答案 1 :(得分:2)
您的javascript代码中很可能出现错误,导致Google Maps api无法执行。你的代码确实很容易发现javascript错误:正如Brian Neal指出的那样,python中的dict文字与ecmascript中的对象文字非常相似,但有一个微妙的区别:
虽然python在最后一个元素之后允许额外的逗号,但是javascript没有。
这适用于python:
{
'position': point,
'map': map,
}
但是在javascript中,这会因语法错误而失败:
{
position: point,
map: map,
}
修复此问题并重试。
每个现代网络浏览器都有不错的javascript调试资源。 Chrome有一个非常好的,Firefox有firebug(IE的最后一个版本也相当不错)。如果您需要进一步的帮助,请查看javascript控制台并告诉我们您看到的错误。
[编辑]
为了解释django模板标签,你必须从django视图提供javscript文件,而不是静态文件。
在urls.py中,包含javascript的条目:
(r'jsresources/latest_points.js', 'yourappname.views.latest_points')
yourappname / views.py中的执行以下操作:
def latest_points(request):
latest_points = YourPointsModel.objects.order_by('-id')[100]
return render_to_response('latest_points.js', locals(), mimetype='text/javascript')