此次主要是做省市区的三级联动。

环境:django 1.10

1. urls.py

 # coding:utf-8
from django.conf.urls import url import views urlpatterns = [
# ajax练习
url(r'^area/$', views.areaindex, name='area'),
url(r'^province/(?P<id>\d+)$', views.province, name='province'),
]

2. models.py

 # coding:utf-8
from django.db import models class AreaInfo(models.Model):
title = models.CharField(max_length=20)
parent = models.ForeignKey('self', null=True, blank=True) # 省的parent为空,存储为NULL # 访问上级对象:area.parent
# 访问下级对象:area.areainfo_set.all()

这里一定要注意第6行,自连接,parent 存的是父级的 id。

这里改完 models.py 后要记得迁移

liuqian@ubuntu:~$ python manage.py makemigration
liuqian@ubuntu:~$ python manage.py migrate

迁移完后录入数据。数据库字段如下:

3. views.py

 # coding:utf-8
from django.shortcuts import render
from django.http import JsonResponse from models import AreaInfo def areaindex(request):
'''ajax练习'''
return render(request, 'area.html') def province(request, id):
id = int(id)
if id == 0:
# 查询省份
provinces = AreaInfo.objects.filter(parent__isnull=True).values('id', 'title')
else:
# 查询区
provinces = AreaInfo.objects.filter(parent=id).values('id', 'title')
return JsonResponse({'data': list(provinces)})

注意:第15行和第18行的 values('id', 'title') 。因为 parent 字段是自连接字段,所以如果 values() 不带参数,可能会导错误(根据dajngo版本来决定)。

4. area.html

 {% load static from staticfiles %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ajax练习</title>
<script src="{% static 'js/jquery-1.10.2.min.js' %}"></script>
<!-- <script src="/static/book/js/jquery-1.10.2.min.js"></script> -->
<script>
$(function(){
// 显示省
$.get("{% url 'province' 0 %}", function(dic){ // {data:{id:..., title:...},{}}
pro = $('#pro');
$.each(dic.data, function(index, item) { // item ---> {id:..., title:...}
pro.append('<option value="' + item.id + '">' + item.title + '</option>')
})
}) // 根据省显示市
$('#pro').change(function(){
$.get("/province/" + $(this).val(), function(city_data){
city = $('#city');
city.empty().append('<option value="0">请选择市</option>');
$('#dis').empty().append('<option value="0">请选择区</option>');
$.each(city_data.data, function(index, item){
city.append('<option value="' + item.id + '">' + item.title + '</option>')
});
});
}); // 根据市选择区
$('#city').change(function(){
$.get("/province/" + $(this).val(), function(dis_data){
dis = $('#dis');
dis.empty().append('<option value="0">请选择区</option>');
$.each(dis_data.data, function(index, item){
dis.append('<option value="' + item.id + '">' + item.title + '</option>')
});
});
});
});
</script>
</head>
<body>
<select id="pro" name="pro">
<option value="0">请选择省</option>
</select>
<select id="city" name="city">
<option value="0">请选择市</option>
</select>
<select id="dis" name="dis">
<option value="0">请选择区</option>
</select>
</body>
</html>

area.html 存放的位置根据 settings.py 中 TEMPLATES 的 DIRS 值来定。

jquery-1.10.2.min.js 存放的位置根据 settings.py 中 STATICFILES_DIRS 的值来定。

5. 访问

启动服务后,访问 http://127.0.0.1:8000/area/ ,即可看到下面的界面:

Django 之 Ajax的更多相关文章

  1. python Django之Ajax

    python Django之Ajax AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步 ...

  2. django 接受 ajax 传来的数组对象

    django 接受 ajax 传来的数组对象 发送:ajax 通过 POST 方式传来一个数组 接收:django 接受方式 array = request.POST.getlist(‘key[]’) ...

  3. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  4. Django使用AJAX调用自己写的API接口

    Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...

  5. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  6. Django之Ajax提交

    Ajax 提交数据,页面不刷新 Ajax要引入jQuery Django之Ajax提交 Js实现页面的跳转: location.href = "/url/" $ajax({ url ...

  7. Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数

    Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...

  8. Django之AJAX传输JSON数据

    目录 Django之AJAX传输JSON数据 AJAX 中 JSON 数据传输: django响应JSON类型数据: django 响应 JSON 类型数据: Django之AJAX传输JSON数据 ...

  9. Django之ajax(jquery)封装(包含 将 csrftoken 写入请求头方法)

    由于支持问题,未使用 es6 语法 _ajax.js /** * 发起请求 * @param url 请求地址 * @param data 请求数据 { } json格式 * @param type ...

  10. Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)

    1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...

随机推荐

  1. mono安装

    linux上的DotNET,安装mono 当前,在Linux系统上架设ASP.NET网站.建设WEB应用工程项目已经在国内流行起来,而“Mono+Jexus”架构模式是Linux承载ASP.NET企业 ...

  2. vue项目多页配置

    文件目录 ├─build ├─config ├─dist │ └─static │ ├─css │ ├─img │ └─js ├─src │ ├─assets │ │ ├─img │ │ ├─js │ ...

  3. django-from

    构建一个表单 这是一个非常简单的表单.实际应用中,一个表单可能包含几十上百个字段,其中大部分需要预填充,而且我们预料到用户将来回编辑-提交几次才能完成操作. 我们可能需要在表单提交之前,在浏览器端作一 ...

  4. cocos代码研究(16)Widget子类RadioButton学习笔记

    理论基础 RadioButton是一种特定类型的两状态按钮,它与复选框相似.它可以 和RadioButtonGroup一起使用,形成一个"组".继承自AbstractCheckBu ...

  5. FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟

    http://www.cnblogs.com/wuhenke/archive/2010/03/16/1686885.html 想想自己先前搞PDF转SWF,然后在线浏览功能时,实在是费了不少精力.后来 ...

  6. 【运维技术】Jenkins配置使用教程

    Jenkins配置使用教程 单机jenkins启动 软件安装和启动,必须含有java环境 # 安装jdk,参考其他教程,创建文件目录 mkdir -p /app/jenkins cd /app/jen ...

  7. P1174 打砖块

    P1174 打砖块 普通分组背包:50pts 题解说的啥????(大雾) 看了半天 $s[0/1][i][j]$表示第$i$列用$j$发子弹,最后一发是1/否0打在该列上的价值 $f[0/1][i][ ...

  8. Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat 8.0 installation is...

    Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat ...

  9. 20145315 《Java程序设计》第七周学习总结

    20145315 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间与日期 13.1.1时间的度量 1.格林威治时间(GMT):参考太阳到达最高点,有时间误差. 2.世界 ...

  10. tensorflow 安装GPU版本,个人总结,步骤比较详细【转】

    本文转载自:https://blog.csdn.net/gangeqian2/article/details/79358543 手把手教你windows安装tensorflow的教程参考另一篇博文ht ...