一百四十六:CMS系统之帖子按照发布时间和评论数量排序

按照不同选项进行排序

视图

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

@bp.route('/')
def index():
board_id = request.args.get('board_id', type=int, default=None)
banners = BannerModel.query.order_by(BannerModel.priority.desc()).limit(4) # 只取4条
boards = BoardModel.query.all()
sort = request.args.get('sort', type=int, default=1) # 排序方式:精华帖子、点赞最多、评论最多
page = request.args.get(get_page_parameter(), type=int, default=1)
start = (page - 1) * config.PER_PAGE
end = start + config.PER_PAGE
if sort == 1: # 默认时间倒序
query_obj = PostModel.query.order_by(PostModel.create_time.desc())
elif sort == 2: # 加精时间倒序
query_obj = db.session.query(PostModel).outerjoin(HighlightPostModel).order_by(
HighlightPostModel.create_time.desc(), PostModel.create_time.desc())
elif sort == 3: # todo 点赞数量倒序
query_obj = PostModel.query.order_by(PostModel.create_time.desc())
elif sort == 4: # 评论数量倒序
query_obj = db.session.query(PostModel).outerjoin(CommentModel).group_by(
PostModel.id).order_by(func.count(CommentModel.id).desc(), PostModel.create_time.desc())
if board_id:
query_obj = query_obj.filter_by(board_id=board_id)
posts = query_obj.slice(start, end)
total = query_obj.count()
else:
posts = query_obj.slice(start, end)
total = PostModel.query.count()
# bs_version: bootstrap版本
pagination = Pagination(bs_version=3, page=page, total=total)
context = {'banners': banners, 'boards': boards, 'posts': posts, 'pagination': pagination,
'current_board': board_id, # 把board_id传给前端用于渲染选中事件
'current_sort': sort} # 把sort传给前端用于渲染选中事件
return render_template('front/front_index.html', **context)

前端

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

{% extends 'front/front_base.html' %}
{% from "common/_macros.html" import static %}

{% block title %}
首页
{% endblock %}


{% block head %}
<link rel="stylesheet" href="{{ static('front/css/front_index.css') }}">
{% endblock %}


{% block body %}
<div class="lg-container">

<!-- 轮播图 -->
<div >{% endblock %}

效果

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

根据板块+选项排序

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

{% extends 'front/front_base.html' %}
{% from "common/_macros.html" import static %}

{% block title %}
首页
{% endblock %}


{% block head %}
<link rel="stylesheet" href="{{ static('front/css/front_index.css') }}">
{% endblock %}


{% block body %}
<div class="lg-container">

<!-- 轮播图 -->
<div >{% endblock %}

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

效果

一百四十六:CMS系统之帖子按照发布时间和评论数量排序

一百四十六:CMS系统之帖子按照发布时间和评论数量排序