Django传递数据给JS
2016-01-21 00:36
573 查看
Django 数据json格式传输js
把一个 list 或者 dict 传递给 js文件,处理后显示到网页上,直接在视图函数(views.py中的函数)中渲染一个 list 或 dict 的内容,和网页其它部分一起显示到网页上,一次请求一次传输。
views.py中返回的函数中的值要用 json.dumps(xx)处理,参数xx需要字典或者列表。
在网页上要加一个 safe 过滤器。
一 、大致的流程
1.第一步,在view.py渲染
views.py # -*- coding: utf-8 -*- from __future__ import unicode_literals import json from django.shortcuts import render def home(request): List = ['列表1', '列表2'] Dict = {'键1': '值1', '键2': '值2'} return render(request, 'home.html', { 'List': json.dumps(List), 'Dict': json.dumps(Dict) })
2.第二步,对应需要跳转的网页home.html :
代码如下:
下新建一个
<script type="text/javascript"> var List = {{ List|safe }};//列表 var Dict = {{ Dict|safe }};//字典 </script>
ps: 注意分号不要漏了,需要模板语言两个大括号{{ }};
3.第三步,在urls配置文件 urls.py,添加一个网址来对应我们刚才在views.py下新建的视图函数。因为只有在调用上面的home方法时,才会有生成列表或字典,并返回(即只有调用才会执行return语句)
url'^网址',home,name='XXX',
4.第四步,打开django服务器就可以在网页上看到你传过去的数据了,因为开服务器的时候就通过urls来调用views里对应的方法,数据传输。
二 、 举个具体的例子(想传输一个列表)
先看项目需求,原本的js文件是这样的,
在原本的js文件里是这样传数据的:部分代码如下,这是一个并状图的数据传输代码
代码如下:
var series= [{ //这一块是需要传输的数据,即一个大列表 type: 'pie', name: '占比', data: [ ['悲伤',45.0],//数据来源于后台 ['愤怒',26.8], ['焦虑',12.7], ['同情',8.5], ['喜欢',5.3], ['厌恶',5.3], ['愉快',2.1], ['怨恨',1.7] ] }]; var json = {}; json.chart = chart; json.title = title; json.tooltip = tooltip; json.series = series; //这个语句就是接收数据,对应上面的series json.plotOptions = plotOptions; $('#oPie1').highcharts(json); });
我们要做的就是怎样把这个需要传输的series不要放在js里,而是把它放在views里面动态地传输过来??
1.第一步,把上面的需要传输的series注释掉,把它写到views下的一个方法
代码如下:在views.py
def pie_json(request): pie_series1 = { # 用字典的形式,为什么原来的js里面是列表,而这里却是用字典??看下去就知道啦!! 'type': 'pie', 'name': '占比', 'data': [ ['厌恶', 4], ['同情', 5], ['喜欢', 2], ['怨恨', 4], ['悲伤', 5], ['愉快', 4], ['愤怒', 7], ['焦虑', 9] ] } json_data = json.dumps(pie_series1, separators=(',', ':')) # 字典通过json打包传输,separators=(',', ':')分隔,:,得到更加紧凑的输出,即是压缩作用 return render(request, 'index.html', { # 这里会指定到inddex.html下,把data1传输过去,对应变量名为series 'series': json_data})
2.第二步:传到对应的html.在对应的index.html下的下建立
<script type="text/javascript"> var data = [{{ series|safe }}]; {# 传输过来的series通过过滤器safe传输过来了,但不要忘了series是字典形式,所以要和原来的js文件一致需要列表,那就加上[]就行啦~~ #} </script>
3.第三步,js接受html的数据,还记得js里那句接受数据的语句吗? 把变量名改成html里的变量名就ok啦~
var json = {}; json.chart = chart; json.title = title; json.tooltip = tooltip; json.series = data; //这个语句就是接收数据,对应html的data json.plotOptions = plotOptions; $('#oPie1').highcharts(json);
4.写好了对应关系,那就最后一步需要调用view下的那个方法,就可以一路传输下来了~怎么调用呢??
在ulrs.py下写上对应的方法就行啦
url(r'^index', pie_json, name='index')
5.打开服务器,浏览器上运行网页就可以传输过去了
可能出现的问题:
网页无法显示数据,可能是urls.py没有调用到对应方法,数据没有传输成功,也可能是没有打开服务器,变量名对应是否写正确,原js文件需要传输的格式是字典还是列表,过滤器safe是否有写,separators=(‘,’, ‘:’)是否写正确。
相关文章推荐
- json格式数据的添加,删除及排序方法
- js实现的二分查找算法实例
- js采用concat和sort将N个数组拼接起来的方法
- JS遍历数组及打印数组实例分析
- js console.log打印对像与数组用法详解
- JavaScript 中"$"的含义?
- 通过两个例子来理解js中的命令模式
- javascript时间戳和日期字符串相互转换
- 在循环显示HTML代码的js函数中的传参问题
- js 横屏 竖屏 判断
- JS 窗口自动关闭
- JS窗口循环显示关闭
- Extjs3 Ext.grid.PropertyGrid 消除属性显示排序
- Jsoncpp的使用
- JS判断、校验MAC地址的2个实例
- 点击jsp页面按钮后,禁用整个页面的方法
- javascript中typeof的运用
- 初探JSP
- 在一个jsp页面引用另一个jsp页面的方式
- 小tip:我是如何初体验uglifyjs压缩JS的