[py][mx]实现按照课程机构排名,按照学习人数排名

原型是
1312420-20180210203706248-2038222390.png

实现效果

1312420-20180210203614591-640226435.png

因为要按照这两个指标排名, 模型中现在还没有这2个字段(整数),所以需要修改模型.

修改模型,添加2个排序指标的字段

class CourseOrg(models.Model):
...
    students = models.IntegerField(default=0,verbose_name="学习人数")
    course_nums = models.IntegerField(default=0,verbose_name="课程数")

修改views实现排序,返回排序结果,返回sort的值判断显示高亮


class OrgView(View):  # 课程机构列表页
    def get(self, request):
        all_orgs = CourseOrg.objects.all()  # 所有课程机构
...
        sort = request.GET.get("sort", "") ## 获取到前端传过来的关键字sort的值
        if sort == "students":
            all_orgs = all_orgs.order_by("-students")  # 按照学生数倒序排列
        elif sort == "courses":
            all_orgs = all_orgs.order_by("-course_nums")  # 按照课程数倒序排列
...
        org_nums = all_orgs.count()  # 多少家课程机构
...
        return render(request, 'org-list.html', {
...
            'sort': sort
        })

模板修改

  • 修改链接
<a href="?sort=courses&ct={{ category }}&city={{ city_id }}">按课程数排名</a>

注: 需要记住上面按照机构类别和所在地区的结果(本质上是记住上面筛选的链接)

  • 根据后端返回的sort的值来判别颜色显示
<p class="{% ifequal sort '' %}bgColor{% endifequal %}">
    <div>
        <p class="{% ifequal sort '' %}bgColor{% endifequal %}"><a href="?&ct={{ category }}&city={{ city_id }}">全部</a></p>
        <p class="{% ifequal sort 'students' %}bgColor{% endifequal %}"><a href="?sort=students&ct={{ category }}&city={{ city_id }}">按学习人数排名</a></p>
        <p class="{% ifequal sort 'courses' %}bgColor{% endifequal %}"><a href="?sort=courses&ct={{ category }}&city={{ city_id }}">按课程数排名</a></p>
        <strong>共{{ org_count }}家</strong>
        <ul>
            {% for course_org in all_orgs.object_list %}
                <li><img src="{{ MEDIA_URL }}{{ course_org.image }}" alt=""></li>
                <li>{{ course_org }}</li>
            {% endfor %}
        </ul>
        <p>{{ all_orgs.render }}</p>
    </div>

转载于:https://www.cnblogs.com/iiiiiher/p/8439696.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值