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和GO语言实现的消息摘要算法示例
Mar 10 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
Python 多维List创建的问题小结
Jan 18 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python中JWT用户认证的实现
May 18 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
python主要用于哪些方向
Jul 05 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
Python入门学习之类的相关知识总结
May 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常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python实现删除文件但保留指定文件
2015/06/21 Python
Python实现多线程抓取妹子图
2015/08/08 Python
对Python3中的input函数详解
2018/04/22 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
员工培训心得体会
2013/12/30 职场文书
禁烟标语大全
2014/06/11 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
前台岗位职责范本
2015/04/16 职场文书
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android