8

テンプレートの通常のPython辞書に渡しましたが、内部に入る必要があります

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

その Python 辞書を JavaScript 辞書に変換します。のようにしてみました

var js_dict={{parameters}};

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

4

8 に答える 8

20

Python と JavaScript はどちらも、辞書を表現する方法について異なる考えを持っています。つまり、Python と JavaScript の間でデータを渡すには中間表現が必要です。これを行う最も一般的な方法は、シンプルで軽量なデータ交換形式であるJSONです。

python json ライブラリを使用して、python dict を JSON 文字列に変換 (またはダンプ) します。次に、javascript で JSON 文字列を解析して javascript dict にします。(JQuery を使用している場合は、jQuery.parseJSONを使用します)

于 2012-04-09T13:11:10.563 に答える
7

それをJSONに変換して、そのテンプレートで使用できます

あなたのPythonコードで

import json
...
...
return {'parameters': json.dumps(parameters)} #This data goes into your template
于 2012-04-09T13:01:29.057 に答える
3

json.dumps(parameters)で使用できますmark_safe()

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

mark_safe()テンプレートでエスケープされていないコードを取得します。

于 2017-09-26T00:10:22.667 に答える
1

他の人がすでに示唆しているように、ビューで辞書をJSONに変換してから、代わりにJSONをテンプレートコンテキストに渡すのが実際には最善のアプローチですが、テンプレートでPython辞書として保持したい場合は、次のことができます。javascriptバージョンを手動で作成する必要があります(つまり、でダンプすることはできません{{ parameters }}

<script>
    var js_dict = {
        {% for k, v in parameters %}
        "{{ k }}": "{{ v }}"{% if not forloop.last %},{% endif %}
        {% endfor %}
    }
</script>
于 2012-04-09T16:53:27.557 に答える
1

以下の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 が機能しないようです。

于 2013-03-13T10:09:53.367 に答える