将对象从Django传递给Javascript DOM - 代码日志

将对象从Django传递给Javascript DOM

我试图将一个查询集从Django传递给一个带有javascript的模板。

我已经尝试了不同的方法来解决这个问题:

1.正常方法 – 由于名称[& gt Object&ID:&’Object:ID& lt …,…]

Django视图

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

模板HTML JS

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

2. JSON方法 – Django将对象列表转换为json字符串失败
不是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>

所以,我需要一些帮助:)

任何一个有任何建议/解决方案?

谢谢!

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

主要是因为没有引用结果。当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 );

注意:我试图避免使用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 );

我确定这可以改进,我让这个给你);

感谢您的答案

希望对别人有帮助!

http://stackoverflow.com/questions/7165656/passing-objects-from-django-to-javascript-dom

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:将对象从Django传递给Javascript DOM