我刚刚使用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
字段)答案 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会更好。