我正在尝试将一个来自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
发布评论