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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python中的__SLOTS__属性使用示例
Feb 18 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python中Django 后台自定义表单控件
Mar 28 Python
用python处理图片实现图像中的像素访问
May 04 Python
pip命令无法使用的解决方法
Jun 12 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
Python实现图像的垂直投影示例
Jan 17 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python字典key不能是可以是啥类型
Aug 04 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
简明json介绍
2008/09/28 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
js数组的操作详解
2013/03/27 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python计算程序运行时间的方法
2014/12/13 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
应届生会计电算化求职信
2013/10/03 职场文书
办公室年终个人自我评价
2013/10/28 职场文书
服务理念口号
2014/06/11 职场文书
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技