我正在尝试使用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_list = list(Some_Object.objects.all()) json_list = simplejson.dumps(django_list)
<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 );
注意:我试图避免使用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 );
我敢肯定,这可以改善,我告诉你;)
谢谢你的回答
希望对别人有帮助!