2012-04-09 10 views
2

私は、通常のPythonの辞書をテンプレートに渡されていると私は、JavaScriptの辞書にそのPythonの辞書に変換するために$(document).ready(function() {.. }Python辞書をJavaScriptのハッシュテーブルに変換するにはどうすればよいですか?

内部

する必要があります。私は

var js_dict={{parameters}}; 

ようにしようとしたが、私はエラーを得た('代わりに'をし、すべての文字列がのuで始まる')。 Python辞書をJavaScriptハッシュテーブルに変換するにはどうすればよいですか?

+0

があります場合は、確認しましたJSON.stringifyはPythonで同等ですか? – lowerkey

答えて

10

PythonとJavaScriptの両方の辞書を表現する方法についてのさまざまなアイデアを持っているし、やることを使用することができますそれらの間でデータを渡すために中間表現が必要です。これを行う最も一般的な方法は、簡単な軽量のデータ交換形式であるJSONです。

python json libraryを使用して、python dictをJSON文字列に変換(またはダンプ)します。その後、javascriptでJSON文字列をjavascriptのdictに解析します。 (JQueryを使用している場合はjQuery.parseJSONを使用してください)

4

あなたはJSONに変換し、そのテンプレートであなたのPythonコードで

があなたのことを意味し

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

他の人が既に示唆しているように、あなたのビューでJSONに辞書を変換してJSONをテンプレートコンテキストに渡すのは本当に最適ですが、あなたのテンプレートの中にPythonの辞書として保管しておけばいいです。あなただけ手動でJavaScriptのバージョンを作成する必要があり

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

下にクリス・プラットの答えに触発された実施例を(つまり、あなただけ{{ parameters }}でそれをダンプすることはできません)(違いに注意):

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

あなたは、私は、テンプレート内のエスケープコードを取得mark_safe()mark_safe()

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

json.dumps(parameters)を使用することができます。

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 %}], 
関連する問題