【问题标题】:How to pass Django variable as javascript method parameter?如何将 Django 变量作为 javascript 方法参数传递?
【发布时间】:2012-07-07 13:12:54
【问题描述】:

我的views.py中有一个extra_context

extra_context = {
    'user': list_user,
    'time': str(list_time),
    'latlng': list_latlng
}

以上所有变量都是python list的数据类型。现在我想在 Gmap v3 javascript 中使用这些变量。我为google map找到了以下sn-p:(发布主要部分)

<script type="text/javascript">
var map ;
function initialize() {
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
  zoom: 2,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.TERRAIN 
};

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var flightPlanCoordinates = [ {% for ip in latlng %}{{ ip }}{% endfor %}];
for(var i in flightPlanCoordinates){
    var marker = add_marker(flightPlanCoordinates[i][0], flightPlanCoordinates[i][1],"Some title!","html for info box");
    marker.setMap(map);
    }
}

function add_marker(lat,lng,title,box_html) {
var infowindow = new google.maps.InfoWindow({
    content: box_html
});

var marker = new google.maps.Marker({
      position: new google.maps.LatLng(lat,lng),
      map: map,
      title: title
});

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});   

return marker;

}

上面的代码显示了一个根据从上下文传递的latlng 列表的标记。但是当时问题正在发生,当时我也尝试以相同的方式通过time and user。它在地图上没有显示任何内容。顺便说一句,我尝试过使用这个代码:

var user = [{% for i in user %}{{ i }}{% endfor %}]; 
var timestamp = [{% for y in time %}{{ y }}{% endfor %}];

这是正确的方法吗?我是根据latlng 代码编写的javascript 新手。

我试过alert(timestamp)。什么都没有发生:(

另一个问题是我必须将这三个参数传递给add_marker java脚本方法。为此,我必须同时运行三个 for 循环。贴出伪代码:

var user = [{% for i in user %}{{ i }}{% endfor %}]; 
var timestamp = [{% for y in time %}{{ y }}{% endfor %}];
var flightPlanCoordinates = [ {% for ip in latlng %}{{ ip }}{% endfor %}];
for (var in flightPlanCoordinates) and for (a in timestamp) and for(b in user)
{
  var marker = add_marker(flightPlanCoordinates[i][0], flightPlanCoordinates[i][1],b,a);
marker.setMap(map);

【问题讨论】:

    标签: python google-maps google-maps-api-3 django-templates django-views


    【解决方案1】:

    您需要将变量定义为:

    var user = [{% for i in user %}{{ i }}{% if forloop.last %} {%else%} , {%endif%} {% endfor %}];

    即在数组中的值之间添加逗号。

    【讨论】:

    • 我认为,{{i}} 应该用引号括起来。
    【解决方案2】:

    使用django-jsonify。在您的模板中使用例如

    var user = {{ user|jsonify }};
    

    像魔术一样。

    【讨论】:

      【解决方案3】:

      使用JSON.parse() 在您的模板中使用例如

      <script type="text/javascript">
          var user = JSON.parse('{{user}}');
      </script>
      

      这对我来说很好;)

      【讨论】:

        猜你喜欢
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 2018-09-03
        • 1970-01-01
        相关资源
        最近更新 更多