在js文件中获取JSON数据在Django Framework中

时间:2016-01-24 19:11:49

标签: javascript python json django d3.js

我有一个JSON文件,我想阅读并使用javascript做一些事情。这都在Django 1.8中。最终目标是使用D3进行一些奇特的可视化,而Django和Python则为后端的其余部分提供动力。

我无法将.json文件中的数据转换为javascript函数。 json文件是' uk.json'。

这是我的views.py:

# Create your views here.
def index(request):
    data = get_data()
    # return jsonify(data)
    return render(request, 'pages/index.html')#, {'data': json.dumps(data)})

# api view function to get the data
def getuk(request):
    json_data = open('/static/js/uk.json')
    data1 = json.load(json_data)    # deserializes it
    data2 = json.dumps(json_data)   # json formatted string

    json_data.close()
    return JsonResponse(data2)

这是我对应的urls.py:

url(r'^$', views.index, name='index'),
url(r'^api/getuk', views.getuk, name='getuk'),

index.html我试图获得所有这些花哨的显示:

{% load staticfiles %}
<!DOCTYPE html>
<meta charset="utf-8">
<style>

/* CSS goes here. */

</style>

<body>

    <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script src="//d3js.org/topojson.v1.min.js"></script>
    <script src="{% static 'js/graph.js' %}"></script>
</body>

最后我的graph.js我想在传递的json数据上使用D3。

d3.json("api/getuk", function(error, uk){
    if(error) return console.error(error);

    console.log(uk);
})

尝试将数据导入graph.js,以便我可以使用它。我知道如何在没有框架的情况下正常地做到这一点,但我试图让这一切都在一起工作。

2 个答案:

答案 0 :(得分:1)

原因是我需要在带有自动关闭的django模板标签的html中创建临时var

var temp = {{ data | safe }};

然后变量temp可以在我的.js文件中播放

答案 1 :(得分:0)

JsonResponse()除了一个字典,不是一个json字符串。

尝试:

def getuk(request):
    with open('/static/js/uk.json') as json_file:
        json_data = json_file.read()
        obj = json.loads(json_data)
    return JsonResponse(obj)