繁体   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