1. 程式人生 > >[py][mx]實現按照課程機構排名,按照學習人數排名

[py][mx]實現按照課程機構排名,按照學習人數排名

多少 mar category 2個 default efault http png img

原型是
技術分享圖片

實現效果

技術分享圖片

因為要按照這兩個指標排名, 模型中現在還沒有這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>

[py][mx]實現按照課程機構排名,按照學習人數排名