django无法将dictdata传递给javascript变量

时间:2015-11-09 03:31:58

标签: javascript python angularjs django

我需要使用django + angularjs来列出数据,并使用强大的角度过滤器。

app.js

var app = angular.module('test',[ ]);
$scope.companies = data;
app.controller("TestList", function($scope) {
$scope.listData = data;
}
var data = ["{{dat}}"];
app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
});

{{dat}}是从django后端发送的数据 它无法展示。

我使用dictfetchall函数将数据提取到dictdata

def dictfetchall(cursor):
"Return all rows from a cursor as a dict"
columns = [col[0] for col in cursor.description]
return [
    dict(zip(columns, row))
    for row in cursor.fetchall()
]
dat = dictfetchall(datCursor)
dictData['dat'] = dat

如果我以django形式列出数据,如

{% for list in dat %}
{{list.name}}
{% endif %}

它的工作,但我需要以javascript格式列出数据解析,如此

var dataList = {{dat}};

它不应该工作

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

Django模板引擎的主要目的是获取数据集并将其转换为HTML。我可能错了,但我不记得模板引擎中的任何内置标签或过滤器允许自动将python列表/ dicts扩展为JSON字符串值。通常,模板语言围绕迭代集合并将其值转换为格式正确且转义为字符串的表示形式。

在这种情况下,最方便的解决方案是使 dat 成为包含您希望替换为模板的JSON文本的字符串。

文件时的某处:

import json

然后更改行:

dictData['dat'] = dat

要:

dictData['dat'] = json.dumps(dat)

在这种情况下,字符串变量替换将提供文本json表示,并且html应该正确呈现。