将对象从Django传递到Javascript DOM [英] Passing objects from Django to Javascript DOM
问题描述
我正在尝试将一个来自Django的查询集传递给一个带有javascript的模板。
我尝试了不同的方法来解决这个问题:
1。正常方法 - 由于命名法[& gt Object:ID& lt,& gt Object:ID& lt,...]
Django View
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 View
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,函数(a,b){
返回{
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,函数(a,b){
返回{
l:'<',
g:'>',
quo:''
} [b];
}));
myDjangoList = myDjangoList.replace(/ u'/ g,'\'')
myDjangoList = myDjangoList.replace(/'/ g,'\')
myData = JSON.parse(myDjangoList);
我确信这可以是改进了,我告诉你了;)
感谢您的回答
希望对其他人有所帮助!
I'm trying to pass a Query Set from Django to a template with javascript.
I've tried different approaches to solve this:
1. Normal Approach - Javascript gets all messed up with trying to parse the object because of the nomenclature [ > Object:ID <, > Object:ID <,... ]
Django View
django_list = list(Some_Object.objects.all())
Template HTML + JS
<script type="text/javascript" >
var js_list = {{django_list}};
</script>
2. JSON Approach - Django fails on converting the object list to a json string is not JSON serializable
Django View
django_list = list(Some_Object.objects.all())
json_list = simplejson.dumps(django_list)
Template HTML + JS
<script type="text/javascript" >
var js_list = {{json_list}};
</script>
So, I need some help here :)
Any one has any suggestion / solution?
Thanks!
Ok, I found the solution!
Mostly it was because of not quoting the results. When Javascript was trying to parse the object this wasn't recognized as string.
So, first step is:
var js_list = {{django_list}};
changed to:
var js_list = "{{django_list}}";
After this I realized that Django was escaping characters so I had to replace them like this:
var myJSONList = (("{{json_list}}").replace(/&(l|g|quo)t;/g, function(a,b){
return {
l : '<',
g : '>',
quo : '"'
}[b];
}));
myData = JSON.parse( myJSONList );
Note: I tried to avoid escaping characters from Django using this:
var js_list = "{{json_list|safe}}";
But this doesn't work because it gets confused with the quotes.
Finally I found a way to avoid the logic on the backend of converting to JSON before sending it to Javascript:
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 );
I'm sure this can be improved, I let this to you ;)
Thanks for your answers
Hope it helps to someone else!
这篇关于将对象从Django传递到Javascript DOM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!