小编典典

将对象从Django传递到Javascript DOM

json

我正在尝试使用javascript将查询集从Django传递到模板。

我尝试了不同的方法来解决此问题:

1.普通方法-由于命名法[&gt Object:ID&lt,&gt Object:ID&lt,…],Javascript试图解析对象一团糟

Django视图

django_list = list(Some_Object.objects.all())

模板HTML + JS

<script type="text/javascript" >
    var js_list = {{django_list}};
</script>

2. JSON方法-Django无法将对象列表转换为不可序列化的JSON字符串

Django视图

django_list = list(Some_Object.objects.all())
json_list = simplejson.dumps(django_list)

模板HTML + JS

<script type="text/javascript" >
    var js_list = {{json_list}};
</script>

因此,我需要一些帮助:)

任何人有任何建议/解决方案?

谢谢!


阅读 251

收藏
2020-07-27

共1个答案

小编典典

好的,我找到了解决方案!

主要是因为没有引用结果。当Javascript尝试解析对象时,该对象未被识别为字符串。

因此,第一步是:

var js_list = {{django_list}};

变成:

var js_list = "{{django_list}}";

此后,我意识到Django正在转义字符,因此我必须像这样替换它们:

 var myJSONList = (("{{json_list}}").replace(/&(l|g|quo)t;/g, function(a,b){
                return {
                    l   : '<',
                    g   : '>',
                    quo : '"'
                }[b];
            }));

 myData = JSON.parse( myJSONList );

注意:我试图避免使用this来转义Django中的字符

var js_list = "{{json_list|safe}}";

但这是行不通的,因为它与引号混淆了。

最终,我找到了一种避免在将后端发送到Javascript之前将其转换为JSON的逻辑的方法:

var myDjangoList = (("{{django_list |safe}}").replace(/&(l|g|quo)t;/g, function(a,b){
            return {
                l   : '<',
                g   : '>',
                quo : '"'
            }[b];
        }));

myDjangoList = myDjangoList.replace(/u'/g, '\'')
myDjangoList = myDjangoList.replace(/'/g, '\"')

myData = JSON.parse( myDjangoList );

我敢肯定,这可以改善,我告诉你;)

谢谢你的回答

希望对别人有帮助!

2020-07-27