簡體   English   中英

如何將 Python 字典轉換為 JavaScript hash 表?

[英]How can I convert Python dictionary to JavaScript hash table?

我已經傳遞給模板常規 Python 字典,我需要在里面

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

將該 Python 字典轉換為 JavaScript 字典。 我試過

var js_dict={{parameters}};

但我得到了錯誤( '而不是'並且所有字符串都以u'開頭)。 如何將 Python 字典轉換為 JavaScript hash 表?

Python 和 javascript 對於如何表示字典有不同的想法,這意味着您需要一個中間表示以便在它們之間傳遞數據。 最常見的方法是JSON ,這是一種簡單的輕量級數據交換格式。

使用python json 庫將您的 python 字典轉換(或轉儲)為 JSON 字符串。 然后在 javascript 中將 JSON 字符串解析為 javascript 字典。 (如果您使用的是 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()我在模板中獲得了未轉義的代碼。

我發現這對包含 [ ' ] 的字符串也有幫助

const convertPythonDictToJSON = function (data) {
    let d = data.replace(new RegExp(`(?<=[a-zA-Z])'(?=[a-zA-Z ])`, "g"), '__')
    d = d.replace(new RegExp("'", 'g'), '"')
    d = d.replace(new RegExp("__", 'g'), "'")
    d = d.replace(new RegExp("None", 'g'), 'null')
    d = d.replace(new RegExp("False", 'g'), 'false')
    d = d.replace(new RegExp("True", 'g'), 'true')
    return JSON.parse(d)
}

正如其他人已經建議的那樣,在您的視圖中將您的字典轉換為 JSON,然后將 JSON 傳遞給模板上下文,這確實是您最好的方法,但是如果您想在模板中將其保留為 python 字典,您可以; 你只需要手動創建 javascript 版本(即你不能只用{{ parameters }}轉儲它)

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

一個受克里斯帕特下面的回答啟發的工作示例(注意區別):

 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 庫似乎對我不起作用。

您不需要發送字典。

這是我如何實現的:

視圖.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 %}],

如何通過在模板頁面上傳遞 object 而不是從 py 文件傳遞字典來處理這種情況,我在模板本身上創建了所需的字典。 像:

在我的 py 上:

def abc(request): 
     conf = assessment_master.objects.all()
     return render(request, "enter_scheme.html", {'conf':conf})

在我的 django 模板上:在我的腳本標簽內:

<script>
           var conf_dict_list = {};
           {% for obj in conf_dict_list %}
               conf_dict_list["{{ obj.short_name }}"] = "{{ obj.select }}"
           {% endfor %}

            alert(JSON.stringify(conf_dict_list));
            // alert('key' in conf_dict_list); to check key is present in dict

</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM