FOR循环JS脚本中的Django模型

时间:2015-11-02 21:53:14

标签: javascript python json django django-models

我刚刚使用Django和HTML / Javascript模板启动了一个Web应用程序。

我的Django spot应用包含一个发送到HTML模板的Spot模型 - 用于Google Map Api。在循环包含spots的变量Spot.objects.all()时,我遇到了问题。 似乎问题来自我将数据发送到HMTL文件的方式。

----------------------------------------- Spot Django -app:models.py --------------------------------------------

class Spot(models.Model):
     idn = models.IntegerField(unique = True)
     name = models.CharField(max_length = 200)
     longitude = models.FloatField()
     latitude = models.FloatField()

----------------------------------------------- - HTML / JS --------------------------------------------- -

<script type="text/javascript">
   var IDs = []
   var names = []
   var lat = []
   var lng = []

   { % for spot in spots % }
      IDS.push( {{spot.idn}} );       
      names.push( {{spot.name}} );
      lat.push( {{spot.latitude}} );
      lng.push( {{spot.longitude}} );
   { % endfor % }

然后,列表中不包含任何可以在以后使用的数据。更糟糕的是,如果names.push( {{spot.name}} )未被注释,则HTML文件不起作用。

----------------------------------------- Spot Django -app:views.py --------------------------------------------

from spots.models import Spot
def index(request):
   return render(request, 'index.html', {'spots':Spot.objects.all()})

由于其他stackoverflow问题(如下所列),我还尝试使用Spot.objects.all()或通过创建自己的序列化程序(感谢Django_REST)序列化django.core.serializers.serialize("json", Spot.objects.all() )。问题依然存在。我用JS解析数据的方式问题是什么?

我看了以下链接:

没有成功。因此,如果答案包含在这些主题中或与这些主题相关,您是否介意向我解释一些我已经工作了几天的事情......

修改 问题是复数:

  • 序列化数据(或不是;我现在没有,但回答的每个人都同意说它更好)
  • 将引号从{{ spot.name }}添加到'{{ spot.name }}',仅添加到非Integer / Float模型(即只有models.CharFields字段)
  • Google Maps Api可能会返回某些(经度,纬度)元组的错误,即使它们定义明确

2 个答案:

答案 0 :(得分:1)

即使我认为将数据序列化为Json也是更好的主意。您的JavaScript代码不起作用,例如{{ spot.name }}将呈现原始字符串,以便javascript理解它,您需要将其放在引号中(当然,每行后面都有分号)。

names.push('{{spot.name}}');

答案 1 :(得分:1)

Django无法识别这些模板标签,因为大括号和百分比之间有空格。所以,根本没有循环。您需要以正确的格式编写它们:

<input type="hidden" name="fieldname" value="<?php echo $namefield?>" />

一旦你这样做,你就会开始得到各种JS语法错误,因为你没有用引号包装任何数据。但是,正如评论所说的那样,将此作为JSON会更好。