Django NBA Web开发 - Step 15 异步加载局部信息

前一章节做完了球队常规赛数据的展示,这个章节想做通过选择器来选择常规赛是属于哪个赛季,最终展示对应赛季信息的功能,并且这个功能需要做成异步加载.

1: 赛季选择框

首先做一个控件,用于选择你想看到哪个赛季的信息,还是在前端模板中,只做功能,优化后期再说。

2: 编写script


3: 修改views视图函数

说实话,这个views函数改了3天,期间查了无数关于queryset的文章.
其实明明很简单的问题,被自己查复杂了.

按照请求类型来划分,get的时候,正常渲染2018赛季的信息
如果是post,则按照客户选择的年份来进行展示数据

def team_regular(request):

    if request.method == 'GET':
        # 取出对象的值得集合,对象是一个valuequeryset
        teams = Team_Season_Regular.objects.filter(Season=2018).values()
        # 遍历每个实例对象
        for i in teams:
            # 将几个命中率的数据转换成百分比
            i['FGP'] = '{:.2f}%'.format(i['FGP'] * 100)
            i['ThreePP'] = '{:.2f}%'.format(i['ThreePP'] * 100)
            i['TwoPP'] = '{:.2f}%'.format(i['TwoPP'] * 100)
            i['FTP'] = '{:.2f}%'.format(i['FTP'] * 100)

        # 取得模型的字段名提供给前端,并忽略第一个
        field_names = Team_Season_Regular._meta.fields[1:]
        return render(request, 'team_regular.html', locals())
    elif request.method == 'POST':
        year = request.POST['year']
        teams = Team_Season_Regular.objects.filter(Season=year)

        for each_row in teams:
            each_row.FGP = '{:.2f}%'.format(each_row.FGP * 100)
            each_row.ThreePP = '{:.2f}%'.format(each_row.ThreePP * 100)
            each_row.TwoPP = '{:.2f}%'.format(each_row.TwoPP * 100)
            each_row.FTP = '{:.2f}%'.format(each_row.FTP * 100)
        teams_set = serializers.serialize('json', teams)
        return JsonResponse({'status': 'success', 'notice': 'this year is' + year, 'rows': len(teams), 'teams_set': teams_set})

4: 效果展示

Django NBA Web开发 - Step 15 异步加载局部信息_第1张图片
效果展示

再看一下后台的请求


后台请求

你可能感兴趣的:(Django NBA Web开发 - Step 15 异步加载局部信息)