Python---Django:通过ajax请求实现省市级案例的下拉列表框

代码实例:

area.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>省市县选择案例</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){
            // 发起一个ajax请求 获取所有省级地区的信息
            // 获取信息,使用get
            // 涉及到信息修改,使用post

            // 浏览器发起Ajax get请求
            $.get('/prov', function (data) {
                // 回调函数

                // 获取prov下拉值
                prov = $('#prov')
                // 获取返回的json数据
                res = data.data

                // 遍历数组,获取每一个元素:[地区id,地区标题]
                /*
                for (i = 0;i<rel.length;i++)
                    id = res[i][0]
                    atitle = res[i][1]
                    option_str = '<option value="' + id + '">' + atitle + '</option>'
                    // 向prov下拉框中追加元素
                    prov.append(option_str)

                 */

                // 遍历数组更简单的做法
                $.each(res, function (index, item) {
                    id = item[0]
                    atitle = item[1]
                    options_str = '<option value="'+id+'">'+atitle+'</option>'
                    # 将option_str的值加入prov下拉值里
                    prov.append(options_str)
                })
            })

            // 绑定prov下拉列表框的change事件,获取省下面的市的信息
            $('#prov').change(function () {
                // 发起一个ajax请求 /city获取省下面市级地区的信息
                // 获取点击省的id
                prov_id = $(this).val()
                $.get('/city'+prov_id, function (data) {
                    res = data.data
                    city = $('#city')
                    city.empty().append('<option>---请选择市---</option>')
                    $.each(res, function (index, item) {
                        city_id = item[0]
                        city_atitle = item[1]
                        city_options_str = '<option value="'+city_id+'">'+city_atitle+'</option>'
                        city.append(city_options_str)
                    })

                })

            })

            // 绑定city下拉列表的change事件,获取市下面县的地区
            $('#city').change(function () {
                // 发起一个ajax请求 /dis获取市下面的县级地区
                // 获取点击市的id
                city_id = $(this).val()

                $.get('/dis'+city_id, function (data) {
                    dis_data = data.data
                    dis = $('#dis')
                    dis.empty().append('<option>---请选择县---</option>')
                    $.each(dis_data, function (index, item) {
                        dis_id = item[0]
                        dis_attile = item[1]
                        dis_option = '<option value="'+dis_id+'">'+dis_attile+'</option>'
                        dis.append(dis_option)


                    })

                })


            })

        })

    </script>
</head>
<body>
<select id="prov">
    <option>---请选择省---</option>
</select>

<select id="city">
    <option>---请选择市---</option>
</select>
<select id="dis">
    <option>---请选择县---</option>
</select>
</body>
</html>

·

·

views.py

from django.http import JsonResponse
from booktest.models import AreaInfo


def area_show(request):
    return render(request, 'booktest/area.html')
    
def prov(request):
    '''获取所有省级地区的信息'''

    # 获取所有省级信息的查询集
    areas = AreaInfo.objects.filter(area_parent__isnull=True)

    areas_list = list()
    for i in areas:
        areas_list.append((i.id, i.area_name))

    return JsonResponse({'data': areas_list})


def city(request, pid):
    '''获取pid的下级地区的信息'''
    # area = AreaInfo.objects.get(id=pid)
    # areas = area.areainfo_set.all()
    areas = AreaInfo.objects.filter(area_parent__id=pid)

    areas_list = list()
    for area in areas:
        areas_list.append((area.id, area.area_name))

    return JsonResponse({'data':areas_list})

def dis(request, pid):
    '''获取市级以下县级地区'''

    areas = AreaInfo.objects.filter(area_parent__id=pid)
    area_list = list()
    for area in areas:
        area_list.append((area.id, area.area_name))

    return JsonResponse({'data':area_list})

urls.py

from django.urls import path,re_path
from booktest import views

urlpatterns = [
	path('areas', views.area_show)
	re_path(r'prov(\d+)$', views.prov),
	re_path(r'city(\d+)$', views.city),
	re_path(r'dis(d\+)$', views.dis),

]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此时一位小白路过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值