27.列表筛选和排名功能

筛选功能的意思是,用户点击某个城市后,比如北京,只显示位于北京的机构。为了知道用户想要显示哪个城市,需要从前端传递给后台一个变量以告诉后台该显示哪些机构。在显示城市的循环里:

                    
全部 {% for city in all_citys %} {{ city.name }} {% endfor %}

href="?city={{ city.id }}"这样就获取了city的id,保存到名为'city'的变量里。在views.py,

city_id = request.GET.get('city',"")

这样可以获取传递来的city变量。然后再传回到前端,让前端把被选中的城市点亮(active)。于是

全部
{% for city in all_citys %}
    {{ city.name }}
{% endfor %}

如果city_id为空,即没选中,则“全部”亮,否则被选的亮。然后是机构类别的筛选,与城市类似。

category = request.GET.get('ct', "")
        if category:
            all_orgs = all_orgs.filter(category=category)
                    

但是这样不能两个同时筛选。要同时筛选需要把ct和city都传到后台来筛选。href后边写的东西是GET方法要传到后台的变量。

                        全部
                            {% for city in all_citys %}
                                {{ city.name }}
                            {% endfor %}
                        全部

                            培训机构

                            高校

                            个人

在city='全部'时,只按category筛选。当某个city被点击时,&连接了2个筛选条件。category也是同理。
在筛选完后,数一数有多少机构,在右上角显示。然后是排名功能。机构这么多谁先谁后?可以按学习人数排。
先是页面右边的授课机构排名。在后台排好名了传到前端。
views.py

        all_orgs = CourseOrg.objects.all()
        hot_orgs = all_orgs.order_by("click_nums")[0:3]
.......
        return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_citys":all_citys,
            "org_nums":org_nums,
            "city_id":city_id,
            "categroy":category,
            "hot_orgs":hot_orgs,
            "sort":sort
        })

传进前端,在循环里调用forloop.counter可以返回当前机构是第几个

        
授课机构排名
{% for current_org in hot_orgs %}
{{ forloop.counter }}

{{ current_org.name }}

{{ current_org.adress }}

{% endfor %}

接下来是机构的排序显示。可以选择按课程人数和课程数两个标准排序,需要用户点击a标签把排序标准传到后台,后台再排序,再把排好的课程传给前端。学习人数 ↓
点了“学习人数”就传给后台sort=students,在后台views.py的响应函数里

sort = request.GET.get('sort',"")
if sort:
    if sort == "students":
        all_orgs = all_orgs.order_by("-students")
    elif sort == "courses":
        all_orgs = all_orgs.order_by("-course_nums")
。。。。。。
return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_citys":all_citys,
            "org_nums":org_nums,
            "city_id":city_id,
            "category":category,
            "hot_orgs":hot_orgs,
            "sort":sort
        })

这样就传回给前端排好序的all_orgs了。

                

这样还不能和机构类型、城市字段联合,在筛选了之后排序,于是把city_id和category传到后台一起排序、筛选:

你可能感兴趣的:(27.列表筛选和排名功能)