テンプレートの通常のPython辞書に渡しましたが、内部に入る必要があります
$(document).ready(function() {.. }
その Python 辞書を JavaScript 辞書に変換します。のようにしてみました
var js_dict={{parameters}};
しかし、エラーが発生しました('ではなく'で、すべての文字列がu'で始まります)。Python 辞書を JavaScript ハッシュ テーブルに変換するにはどうすればよいですか?
テンプレートの通常のPython辞書に渡しましたが、内部に入る必要があります
$(document).ready(function() {.. }
その Python 辞書を JavaScript 辞書に変換します。のようにしてみました
var js_dict={{parameters}};
しかし、エラーが発生しました('ではなく'で、すべての文字列がu'で始まります)。Python 辞書を JavaScript ハッシュ テーブルに変換するにはどうすればよいですか?
Python と JavaScript はどちらも、辞書を表現する方法について異なる考えを持っています。つまり、Python と JavaScript の間でデータを渡すには中間表現が必要です。これを行う最も一般的な方法は、シンプルで軽量なデータ交換形式であるJSONです。
python json ライブラリを使用して、python dict を JSON 文字列に変換 (またはダンプ) します。次に、javascript で JSON 文字列を解析して javascript dict にします。(JQuery を使用している場合は、jQuery.parseJSONを使用します)
それをJSONに変換して、そのテンプレートで使用できます
あなたのPythonコードで
import json
...
...
return {'parameters': json.dumps(parameters)} #This data goes into your template
json.dumps(parameters)
で使用できますmark_safe()
def custom_view(request):
...
return render(request, 'tmpl.html', {'parameters': mark_safe(json.dumps(parameters))})
mark_safe()
テンプレートでエスケープされていないコードを取得します。
他の人がすでに示唆しているように、ビューで辞書をJSONに変換してから、代わりにJSONをテンプレートコンテキストに渡すのが実際には最善のアプローチですが、テンプレートでPython辞書として保持したい場合は、次のことができます。javascriptバージョンを手動で作成する必要があります(つまり、でダンプすることはできません{{ parameters }}
)
<script>
var js_dict = {
{% for k, v in parameters %}
"{{ k }}": "{{ v }}"{% if not forloop.last %},{% endif %}
{% endfor %}
}
</script>
以下のChris Pattの回答に触発された実際の例(違いに注意してください):
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 が機能しないようです。