2012-04-09 37 views
2

我已经传给模板常规的Python字典,我需要里面如何将Python字典转换为JavaScript哈希表?

$(document).ready(function() {.. }

来转换Python字典为JavaScript字典。我试着像

var js_dict={{parameters}}; 

,但我得到的错误(',而不是'和所有的字符串开始U')。 如何将Python字典转换为JavaScript哈希表?

+0

你检查,如果有一个在Python中相当于JSON.stringify? – lowerkey 2012-04-09 13:01:44

回答

10

的Python和JavaScript都有关于如何表示的字典,这意味着你不同的想法需要一个中间表示以便在它们之间传递数据。最常见的做法是JSON,这是一种简单的轻量级数据交换格式。

使用python json library将您的python字典转换(或转储)为JSON字符串。然后在JavaScript中将JSON字符串解析为一个javascript字典。 (如果您使用的是JQuery,则使用jQuery.parseJSON

4

你可以把它转换成JSON和使用,在该模板

在Python代码做

import json 
... 
... 
return {'parameters': json.dumps(parameters)} #This data goes into your template 
1

正如其他人已经建议的那样,在您的视图中将字典转换为JSON然后将JSON传递到模板上下文实际上是您的最佳方法,但如果您想要把它保存为模板中的python字典,你可以;你只需要手动创建JavaScript版本(即你不能只是{{ parameters }}倾倒)

<script> 
    var js_dict = { 
     {% for k, v in parameters %} 
     "{{ k }}": "{{ v }}"{% if not forloop.last %},{% endif %} 
     {% endfor %} 
    } 
</script> 
1

由克里斯·帕拉特的回答下面的启发工作示例(注意区别):

42  var js_dict = [ 
43   {% for k, v in parameters.iteritems %} 
44    ["{{ k }}","{{ v }}"] {% if not forloop.last %},{% endif %} 
45   {% endfor %} 
46  ]; 

在处理Django模板中的变量时,默认的python的json lib似乎不适用于我。

0

您可以使用json.dumps(parameters)mark_safe()

def custom_view(request): 
    ... 
    return render(request, 'tmpl.html', {'parameters': mark_safe(json.dumps(parameters))}) 

随着mark_safe()我在模板中得到转义代码。

0

您不需要发送字典。

这里是我是如何实现这一点:

views.py

def mess_opi(request): 
    data = Opi_calculated.objects.all() 

return render(request,'hab_app/opi_student_portal.html', {'data': data}) 

我的模板(用于morris.html):

data: [{% for item in data %} 
    { "y": '{{ item.hostelName }}', "a": '{{ item.opi_value }}' }{% if not forloop.last %},{% endif %} 
{% endfor %}],