将对象从Django传递到Javascript DOM [英] Passing objects from Django to Javascript DOM

查看:599
本文介绍了将对象从Django传递到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 [ &gt Object:ID &lt, &gt Object:ID &lt,... ]

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆