Django与JS交互的示例代码
发布时间 - 2026-01-11 02:55:26 点击率:次应用一:有时候我们想把一个 list 或者 dict 传递给 javascript,处理后显示到网页上,比如要用 js 进行可视化的数据。
请注意:如果是不处理,直接显示在网页上,用Django模板就可以了。

这里讲述两种方法:
一,页面加载完成后,在页面上操作,在页面上通过 ajax 方法得到新的数据(再向服务器发送一次请求)并显示在网页上,这种情况适用于页面不刷新的情况下,动态加载一些内容。比如用户输入一个值或者点击某个地方,动态地把相应内容显示在网页上。
二,直接在视图函数(views.py中的函数)中渲染一个 list 或 dict 的内容,和网页其它部分一起显示到网页上(一次性地渲染,还是同一次请求)。
需要注意两点:1、views.py中返回的函数中的值要用 json.dumps()处理 2、在网页上要加一个 safe 过滤器
view.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import json
from django.shortcuts import render
def home(request):
List = ['自强学堂', '渲染Json到模板']
Dict = {'site': '自强学堂', 'author': '涂伟忠'}
return render(request, 'home.html', {
'List': json.dumps(List),
'Dict': json.dumps(Dict)
})
home.html
<!DOCTYPE html>
<html>
<head>
<title>欢迎光临 自强学堂!</title>
<script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<div id="list"> 学习 </div>
<div id='dict'></div>
<script type="text/javascript">
//列表
var List = {{ List|safe }};
//下面的代码把List的每一部分放到头部和尾部
$('#list').prepend(List[0]);
$('#list').append(List[1]);
console.log('--- 遍历 List 方法 1 ---')
for(i in List){
console.log(i);// i为索引
}
console.log('--- 遍历 List 方法 2 ---')
for (var i = List.length - 1; i >= 0; i--) {
// 鼠标右键,审核元素,选择 console 可以看到输入的值。
console.log(List[i]);
};
console.log('--- 同时遍历索引和内容,使用 jQuery.each() 方法 ---')
$.each(List, function(index, item){
console.log(index);
console.log(item);
});
// 字典
var Dict = {{ Dict|safe }};
console.log("--- 两种字典的取值方式 ---")
console.log(Dict['site']);
console.log(Dict.author);
console.log("--- 遍历字典 ---");
for(i in Dict) {
console.log(i + Dict[i]);//注意,此处 i 为键值
}
</script>
</body>
</html>
应用二:不刷新网页的情况下,加载一些内容
view.py
#coding:utf-8
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse
def get(request):
return render(request, 'oneapp/get.html')
def add(request):
a = request.GET.get('a', 0)
b = request.GET.get('b', 0)
c = int(a) + int(b)
return HttpResponse(str(c))
urls.py
from django.conf.urls import url, include from django.contrib import admin from OneApp import views as oneapp_views urlpatterns = [ url(r'^admin/', admin.site.urls), #url(r'^$', oneapp_views.index), url(r'^oneapp/index/', oneapp_views.index, name='index'), url(r'^oneapp/home/', oneapp_views.home, name='home'), url(r'^oneapp/get/', oneapp_views.get, name='get'), url(r'^oneapp/add/', oneapp_views.add, name='add'), ]
get.html
<!DOCTYPE html>
<html>
<body>
<p>请输入两个数字</p>
<form action="/oneapp/add/" method="get">
a: <input type="text" id="a" name="a"> <br>
b: <input type="text" id="b" name="b"> <br>
<p>result: <span id='result'></span></p>
<button type="button" id='sum'>提交</button>
</form>
<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#sum").click(function(){
var a = $("#a").val();
var b = $("#b").val();
$.get("/oneapp/add/",{'a':a,'b':b}, function(ret){
$('#result').html(ret)
})
});
});
</script>
</body>
</html>
由于用 jQuery 实现 ajax 比较简单,所以我们用 jQuery库来实现.。
用了jQuery.get() 方法,并用 $(selector).html() 方法将结果显示在页面上,如下图:
应用三:传递数字或者字典到网页,由JS处理,再显示出来
首先定义接口和URL
views.py
#coding:utf-8
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
import json
# Create your views here.
def ajax_list(request):
a = range(100)
#return HttpResponse(json.dump(a), content_type='application/json')
return JsonResponse(a, safe=False)
def ajax_dict(request):
name_dict = {'a': 1, 'b': 2}
#return HttpResponse(json.dump(name_dict), content_type='application/json')
return JsonResponse(name_dict)
urls.py
urlpatterns = [ url(r'^admin/', admin.site.urls), #url(r'^$', oneapp_views.index), url(r'^oneapp/index/', oneapp_views.index, name='index'), url(r'^oneapp/home/', oneapp_views.home, name='home'), url(r'^oneapp/get/', oneapp_views.get, name='get'), url(r'^oneapp/add/', oneapp_views.add, name='add'), url(r'^oneapp/ajax_list/', oneapp_views.ajax_list, name='ajax_list'), url(r'^oneapp/ajax_dict/', oneapp_views.ajax_dict, name='ajax_dict'), ]
然后就是在无刷新的情况下,把内容加载到页面了。
index.html
<!DOCTYPE html>
<html>
<body>
<p>请输入两个数字</p>
<form action="/add/" method="get">
a: <input type="text" id="a" name="a"> <br>
b: <input type="text" id="b" name="b"> <br>
<p>result: <span id='result'></span></p>
<button type="button" id='sum'>提交</button>
</form>
<div id="dict">Ajax 加载字典</div>
<p id="dict_result"></p>
<div id="list">Ajax 加载列表</div>
<p id="list_result"></p>
<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
// 求和 a + b
$("#sum").click(function(){
var a = $("#a").val();
var b = $("#b").val();
$.get("{% url 'add' %}",{'a':a,'b':b}, function(ret){
$('#result').html(ret);
})
});
// 列表 list
$('#list').click(function(){
$.getJSON("{% url 'ajax_list' %}",function(ret){
//返回值 ret 在这里是一个列表
for (var i = ret.length - 1; i >= 0; i--) {
// 把 ret 的每一项显示在网页上
$('#list_result').append(' ' + ret[i])
};
})
})
// 字典 dict
$('#dict').click(function(){
$.getJSON("{% url 'ajax_dict' %}",function(ret){
//返回值 ret 在这里是一个字典
$('#dict_result').append(ret.a + '<br>');
// 也可以用 ret['twz']
})
})
});
</script>
</body>
</html>
注意:getJSON中的写的对应网址,用 urls.py 中的 name 来获取是一个更好的方法!标签:{% url 'name' %}
这样做最大的好处就是在修改 urls.py 中的网址后,不用改模板中对应的网址。
如果是一个复杂的字典或者列表,如:
person_info_dict = [
{"name":"xiaoming", "age":20},
{"name":"tuweizhong", "age":24},
{"name":"xiaoli", "age":33},
]
这样我们遍历列表的时候,每次遍历得到一个字典,再用字典的方法去处理,当然有更简单的遍历方法:
用 $.each() 方法代替 for 循环,html 代码(jquery)
$.getJSON('ajax_url_to_json', function(ret) {
$.each(ret, function(i,item){
// i 为索引,item为遍历值
});
});
补充:如果 ret 是一个字典,$.each 的参数有所不同,详见:http://api.jquery.com/jquery.each/
$.getJSON('ajax-get-a-dict', function(ret) {
$.each(ret, function(key, value){
// key 为字典的 key,value 为对应的值
});
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Django与JS交互
# Django
# JS交互
# Python利用Django如何写restful api接口详解
# django和vue实现数据交互的方法
# 使用django和vue进行数据交互的方法步骤
# Django封装交互接口代码
# 遍历
# 是一个
# 加载
# 在这里
# 两种
# 情况下
# 请输入
# 要用
# 返回值
# 就是在
# 可以用
# 适用于
# 有所不同
# 用了
# 这样做
# 可以看到
# 这种情况
# 请注意
# 鼠标右键
# 想把
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Python3.6正式版新特性预览
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何用美橙互联一键搭建多站合一网站?
香港服务器租用每月最低只需15元?
如何用西部建站助手快速创建专业网站?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
深圳网站制作的公司有哪些,dido官方网站?
Bootstrap CSS布局之列表
IOS倒计时设置UIButton标题title的抖动问题
做企业网站制作流程,企业网站制作基本流程有哪些?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何用5美元大硬盘VPS安全高效搭建个人网站?
香港服务器租用费用高吗?如何避免常见误区?
海南网站制作公司有哪些,海口网是哪家的?
网站制作价目表怎么做,珍爱网婚介费用多少?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
,网页ppt怎么弄成自己的ppt?
如何自定义建站之星网站的导航菜单样式?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel如何使用Sanctum进行API认证?(SPA实战)
C#如何调用原生C++ COM对象详解
详解Huffman编码算法之Java实现
高防服务器租用如何选择配置与防御等级?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在服务器上三步完成建站并提升流量?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
如何获取免费开源的自助建站系统源码?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
公司网站制作需要多少钱,找人做公司网站需要多少钱?
php485函数参数是什么意思_php485各参数详细说明【介绍】
Python面向对象测试方法_mock解析【教程】
教你用AI将一段旋律扩展成一首完整的曲子
昵图网官网入口 昵图网素材平台官方入口
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何快速重置建站主机并恢复默认配置?
如何在阿里云服务器自主搭建网站?
实例解析angularjs的filter过滤器
浅述节点的创建及常见功能的实现
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
bootstrap日历插件datetimepicker使用方法
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel如何处理文件下载请求?(Response示例)
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法

