0

我将以下字符串发送到 django 模板。

<script>
var data = '[{"a": 0}, {"b": 1}]'
</script>
  1. 如何像["a", "b"]使用 javascript一样获取密钥
  2. 我还需要一个 javascript 函数来检索给定键的值。
4

4 回答 4

1

只需将其解析为 JSON:

var obj = JSON.parse(data);
obj[0].a // access to a
obj[1].b // access to b
于 2012-08-11T14:17:19.630 回答
1

你需要将python对象转换成javascript可以理解的格式,即json。为此,请simplejson在您的视图中使用:

from django.utils import simplejson
from django.shortcuts import render

def some_view(request):
    ...
    python_data = [
        { 'a' : 'foo', 'b' : 'bar' },
        ...
    ]
    json_data = simplejson.dumps(python_data)
    render(request, "some_template.html", { 'data' : json_data })

并在您的模板中:

<script>
var data = {{ data|safe }}
</script>

(Simplejson 可以很好地转换普通的 python 对象。如果你想转换一个 QuerySet,你需要使用 Django 的序列化器)

于 2012-08-11T14:18:09.043 回答
0
  1. 如何使用 javascript 获取密钥为 ["a", "b"]

    var arrMain = [{"a": 2}, {"b": 3}],
        arrKey = []; 
    
    for (key in arrMain) { 
        if (arrMain.hasOwnProperty(key)) {
            arrKey.push(Object.keys(arrMain[key])[0]); 
        }
    } 
    
    console.log(JSON.stringify(arrKey)​); // returns ["a","b"]
    
  2. 我还需要一个 javascript 函数来检索给定键的值。

    function returnValueByKey(arrMain, arrKey, lookupKey) {
        for (key in arrKey) {
            if (arrKey.hasOwnProperty(key) && arrKey[key] === lookupKey) {
               return arrMain[key][arrKey[key]]; 
            }
        }
    }
    
    console.log(returnValueByKey(arrMain, arrKey, 'a')); // returns 2
    
于 2012-08-11T14:40:17.480 回答
0

为什么不返回 JSON?

from django.utils import simplejson

def function(request):
    if not request.is_ajax():
        raise Http404
    data = list(
        dict(
            a=0,
            b=1
        )
    )
    return HttpResponse(simplejson.dumps(data), mimetype='application/json')

javascript(在本例中使用 jquery)

function getData(){
    $.ajax({
        type: "GET",
        url: "/your/url/to/function/",
        success: function(data){
            return data;
        }
    });
}
var data = getData();
于 2012-08-11T14:16:56.953 回答