将Django模型数据转换为Javascript中可用的变量

时间:2017-05-21 14:49:22

标签: javascript python django

我是编程和SO的新手。我有一个关于使用Django / Python开发的问题。 我正在尝试将django变量用于javascript脚本。

我的模型是这样的:

class Business(models.Model):
    business_name = models.CharField(max_length=200)
    lat = models.FloatField(default=0)
    lng = models.FloatField(default=0)

我正在创建一个将商家数据发送到模板的Django应用程序

def index(request):
    business_list = Business.objects.all()
    context = {'business_list': business_list}
    return render(request, 'kitemap/index.html', context)

我想将django对象列表转换为javascript中可用的对象列表但我无法设法这样做...我尝试了下面的代码但是没有用。能否请你帮忙?感谢

    for (var i = 0; i < {{ business_list|length }}; i++) {

        var school = [];

        business[0] = {{ business_list.i.lat }};
        business[1] = {{ business_list.i.lng }};
        business[2] = {{ business_list.i.business_name }}M

        businesses[i] = business;
    }

2 个答案:

答案 0 :(得分:0)

您可以将查询集序列化为json格式,

from django.core import serializers
from django.http import JsonResponse
import json

business = Business.objects.all()
data = json.loads(serializers.serialize("json", business))
#return JsonResponse(json)
context = dict(data=data)
return render(request, 'kitemap/index.html', context)

然后你可以进行迭代,因为,查询集被转换为dicts列表。

你可能需要做这样的事情,

var school = [];
for (var i=0;i<data.length;i++) {
    var business = {};

    business['business_name'] = json[i].fields.business_name;
    business['lat'] = data[i].fields.lat;
    business['lng'] = data[i].fields.lng;
    school.push(business);
    }

答案 1 :(得分:0)

还可以在javascript中使用safe模板标记。您应该将它应用于来自HttpResponse的上下文变量。