Django 后台带有字典的列表数据与页面js交互实例


Posted in Python onApril 03, 2020

1、这里只是简单介绍一下Django的view如何跟js进行交互,首先,进入用户明细的时候会进入一个页面,叫用户信息表,里面包含了用户学习的课程和所得到的分数,每门课程对应一个分数,其中课程用下拉框依次显示,选择课程时动态显示课程的分数,django view部分代码如下:

def user_info(request, userid):
 if request.method == "GET":
  user = User.objects.get(userid=userid)
  user_info = UserInfo.objects.get(userid=userid)
  content = {"user": user, "user_info": user_info}
  detail_data = {}
  data = []
  for detail in user_info:
   detail_data['course'] = detail.course
   detail_data['score'] = str(detail.score)
   data.append(json.dumps(detail_data, ensure_ascii=False))
  content['detail'] = data
  return render(request, "user/user_info/user_info.html", content)

其中,需注意的是下面这段代码,

(1)、定义一个空的字典为detail_data,接着再定义一个空的列表data,循环得到每个用户信息的详情,也就是用户的每个课程对应的每个分数,分别把值添加进字典里面去。

(2)、后面在把字典的值通过json.dumps转换为json格式,这样才能给html页面的js进行交互,而且如果有中文的话,需要在后面加个ensure_ascii=False参数,不然的话js得到的数据不是我们想得到的数据。

(3)、最后,再把转成json的字典数据添加进列表data中,最后通过content['detail']=data把这个列表传到页面上,供js调用。

detail_data = {}
  data = []
  for detail in user_info:
   detail_data['course'] = detail.course
   detail_data['score'] = str(detail.score)
   data.append(json.dumps(detail_data, ensure_ascii=False))
  content['detail'] = data

2、接下来看下html中如何处理上面传过的detail数据,其中课程用下拉框依次显示,选择课程时动态显示课程的分数,代码如下:

<script>
  function select() {
   var course =$('#course option:selected').val();
   var details = {{ detail|safe }}
   for(var detail in details){
    var data = JSON.parse(details[detail]);
    if(course == data.course){
     $('#score').html(data.score);
    }
   }
  }
 </script>

代码解析一下:

(1)、其中获取下拉框选择的课程值,赋给一个变量course,接着把传过来界面的detail,赋给一个变量details,注意这里必须要用{{ detail|safe }},不然取出来的数据会不是想要的。

(2)、接着,循环上面得到的变量,也就是一个带有字典的列表,循环就得到每一个带有课程和课程分数的字典,因为在view底下是把每一个字典转换为json格式,所以现在必须把循环得到每一个字典通过json解析得到其对应的,通过JSON.parse(details[detail]),否则也是取不到对应的数据。

(3)、通过页面下拉框选择的课程值,跟取到的每个课程的分数做比较,相等的话,就取出对应课程的分数,填充进页面中。

3、Django和js交互的网上例子太少,这里积累一下,以上内容仅供学习参考,谢谢!主要还是自己去尝试。

补充知识:django 后台数据直接交给页面

<html>
<head>
 <title>运维平台</title>
 <link rel="stylesheet" type="text/css" href="/static/Css/Monitor/addmqmonitor.css" rel="external nofollow" >
 <link rel="stylesheet" type="text/css" href="/static/Css/Public/header.css" rel="external nofollow" rel="external nofollow" >
 <link rel="stylesheet" type="text/css" href="/static/Css/Public/menu.css" rel="external nofollow" rel="external nofollow" >
</head>
<body>
 <include file="Public:header"/>
 <div class="content">
  <include file="Public:menu"/>
  <div class="con fl">
   <form id="condition" action="/addmqmonitor/" method="post">
    
    <label class="condition">应用</label><input type="text" name="app" class="equipment_sz">
    <label class="condition">队列管理器</label><input type="text" name="qmgr" class="equipment_sz">
    <label class="condition">通道名称</label><input type="text" name="channel" class="equipment_sz">
        <br />
    <label class="condition">IPADDR</label><input type="text" name="ipaddr" class="equipment_sz">
    <label class="condition">PORT</label><input type="text" name="port" class="equipment_sz">
    <label class="condition">队列监控阈值</label><input type="text" name="depth" class="equipment_sz">
    <label class="condition">是否监控</label><input type="text" name="flag" class="equipment_sz">
        <br />
    <input type="submit" value="设备添加" class="equipment_add_btn">
   </form>
  </div>
 </div>
</body>
<script type="text/javascript" src="/static/Js/jquery-2.2.2.min.js"></script>
<!-- <script type="text/javascript" src="/static/Js/Equipment/addEquipment.js"></script> -->
</html>
 
 
def addmqmonitor(req):
 print req.get_full_path()
 app= req.POST['app']
 qmgr= req.POST['qmgr']
 channel= req.POST['channel']
 ipaddr= req.POST['ipaddr']
 port= req.POST['port']
 depth= req.POST['depth']
 flag= req.POST['flag']
 conn= MySQLdb.connect(
  host='127.0.0.1',
  port = 3306,
  user='root',
  passwd='1234567',
  db ='DEVOPS',
  charset="UTF8"
  )
 cursor = conn.cursor()
 sql = "insert into mon_mq(name,qmgr,channel,ipaddr,port,depth,flag) values('%s','%s','%s','%s','%s','%s','%s')" % (app,qmgr,channel,ipaddr,port,depth,flag)
 cursor.execute(sql)
 conn.commit()
 a = cursor.execute("select name,qmgr,channel,ipaddr,port,flag from mon_mq" )
 info = cursor.fetchall()
 print info
 print type(info)
 return render(req,'listmqinfo.html',{'info':info})
 
 
[root@yyjk templates]#cat listmqinfo.html 
<html> 
<head> 
 <title>运维平台</title> 
 <link rel="stylesheet" type="text/css" href="/static/Css/Equipment/modifyBtn.css" rel="external nofollow" > 
 <link rel="stylesheet" type="text/css" href="/static/Css/Public/header.css" rel="external nofollow" rel="external nofollow" > 
 <link rel="stylesheet" type="text/css" href="/static/Css/Public/menu.css" rel="external nofollow" rel="external nofollow" > 
</head> 
<table border="10">
{% for x in info %} 
<tr>
<th>{{x.0}}</th>
<th>{{x.1}}</th>
<td>{{x.2}}</td>
<td>{{x.3}}</td>
<td>{{x.4}}</td>
<td>{{x.5}}</td>
</tr>
{% endfor %} 
</table>

以上这篇Django 后台带有字典的列表数据与页面js交互实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python MD5文件生成码
Jan 12 Python
Python实现栈的方法
May 26 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python [:3] 实现提取数组中的数
Nov 27 Python
Python @property装饰器原理解析
Jan 22 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
利用Python实时获取steam特惠游戏数据
Jun 25 Python
Django import export实现数据库导入导出方式
Apr 03 #Python
Django用户身份验证完成示例代码
Apr 03 #Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 #Python
python 的topk算法实例
Apr 02 #Python
python torch.utils.data.DataLoader使用方法
Apr 02 #Python
Python基于stuck实现scoket文件传输
Apr 02 #Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 #Python
You might like
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
动态控制Table的js代码
2007/03/07 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
Python排序算法实例代码
2017/08/10 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
用python实现刷点击率的示例代码
2019/02/21 Python
基于python操作ES实例详解
2019/11/16 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
python文件编写好后如何实践
2020/07/07 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
数字漫画:comiXology
2020/06/13 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
企业行政文员岗位职责
2013/12/03 职场文书
运动会解说词100字
2014/01/31 职场文书
体现团队精神的口号
2014/06/06 职场文书
计划生育证明书写要求
2014/09/17 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书