JS脚本中Django模型上的FOR循环

2024-04-20 12:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的Djangospot应用程序包含一个Spot模型,该模型被发送到一个HTML模板中,以便与googlemapapi一起使用。我在遍历包含Spot.objects.all()的变量spots时遇到了一个问题。 问题似乎来自于我将数据发送到HMTL文件的方式。在


-----------------------------SpotDjango应用程序:模型.py--------------------------------------------在

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

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

^{pr2}$

那么,这些列表就不包含以后可以使用的任何数据。更糟糕的是,如果未对names.push( {{spot.name}} )进行注释,则HTML文件将无法工作。在

-----------------------------SpotDjango应用程序:视图.py--------------------------------------------在

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

(感谢下面列出的cd4{I>和其他问题的序列化)。问题依然存在。我用JS解析数据的方式有问题吗?在

我查看了以下链接:

没有成功。所以,如果答案包含或与这些主题相关,你介意给我解释一下我已经工作了好几天了。。。在

编辑: 问题是多方面的:

  • 序列化数据(或者不是;我现在没有,但是每个回答的人都同意这样做更好)
  • 将引号从{{ spot.name }}添加到'{{ spot.name }}',仅添加到非整数/浮点模型(即仅models.CharFields字段)
  • googlemapsapi可能会返回一些元组(经度、纬度)的错误,即使它们定义良好

Tags: 文件数据djangoname模型模板应用程序objects
2条回答

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

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

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

{% for spot in spots %}
   ...
{% endfor %}

一旦你这样做了,你将开始得到各种各样的JS语法错误,因为你没有把你的数据用引号包装起来。但是,正如评论所说,将其作为JSON来处理会更好。在

相关问题 更多 >