一个简单的问题:在Django中如何将views.py中的变量传递到HTML/JavaScript中?

背景    

“领导”一再叮嘱我不要“直接传对象”,我理解成了不管怎么样都不要从后台向前台直接传对象,也没有深究里面的原因,就相当于背过了一个“知识点”,前几天因此遇到了一个“很奇怪”的问题:在views.py中有个字符串的list,我把它通过json.dumps处理一下然后就render到了某个页面,结果发现所有的双引号都变成了",遍历的时候问题百出,当时是百思不得其解,着实困惑了一会。

分析

这个问题二就二在json的使用上了,其实模板变量跟json是一点关系没有的,json只不过是把对象变成了字符串,而模板变量是不需要这一步转换的(我将ajax和模板变量已经混淆得一塌糊涂了)。为了理清这个问题,我整理了一个小例子:

index.html










template.html

{% for item in ret %}
	

{{item}}

{% endfor %}
views.py/template_test

def template_test(request):
    ret=["a","b","c"]
    return render_to_response("template.html",locals(),context_instance=RequestContext(request))
views.py/ajax_test

def ajax_test(request):
    dict={"myArray":[1,2,3]}
    ret=json.dumps(dict)
    return HttpResponse(ret)

结果:

页面:

一个简单的问题:在Django中如何将views.py中的变量传递到HTML/JavaScript中?_第1张图片

console控制台:

一个简单的问题:在Django中如何将views.py中的变量传递到HTML/JavaScript中?_第2张图片

总结

传递给模板变量的数据和ajax的响应数据其实要求是不一样的。
1、传递给模板变量的可以是简单类型、对象类型以及自定义类型。有一点需要注意,模板变量x="1"和x=1,在html/js中值是一样的,都为1,没有双引号
2、ajax异步请求的数据(响应数据)一般都是字符串类型的,如果是list或dict等对象类型,会出错,尽管状态码可能还是200,不过这时要到error里去处理了,而不是success
3、回到最初的问题,&quto;的产生是由于模板变量的自动转义引起的,如果想原汁原味地传可通过过滤器实现,有两种方式:
  • {{ variable | safe }}:单个变量variable不转义
  • {% autoescape off %}  .....  {% endautoescape %}:所有处于这对标签之间的变量都不转义










你可能感兴趣的:(Python)