Flask分页呈现数据时序号按流水号显示

将数据库中查询出来的内容按照添加时间降序呈现到页面,呈现时页面中有“编号”列。

从数据库中查询数据并放到页面中呈现把并不复杂:

在路由中利用PythonSQLAlchemy将数据内容从数据库中查出并进行分页处理。

数据一共有12条,每页显示10条数据。

@admin_blu.route('/movie/list/<int:page>', methods=['GET'])
@login_required
def movielist(page):
    datas = Movie.query.join(Tag).filter(Movie.tag_id == Tag.id).order_by(Movie.addtime.desc()).paginate(page=page, per_page=app.config['PER_PAGE'])
    return render_template('admin/movielist.html',datas=datas)

渲染模板时利用datas参数将数据内容传入呈现:

{%for x in datas.items%}
<tr>
     <td >{{x.id}}</td>
     <td>{{x.title}}</td>
     <td>{{x.length}}分钟</td>
     <td>{{x.tag.name}}</td>
     <td>{{x.area}}</td>
     <td>{{x.star}}</td>
     <td>{{x.playnum}}</td>
     <td>{{x.commentnum}}</td>
     <td>{{x.addtime}}</td>
</tr>
{%endfor%}

这样是可以正常呈现数据的,呈现时效果如图所示:

因为电影是按照添加时间降序排序而且编号使用的是数据记录的ID,这样显示编号感觉并不太好,而是应该按照从1开始以流水号的形式呈现。第一页显示完毕后,到第二页时应该显示11,12,13...。

扫描二维码关注公众号,回复: 3839851 查看本文章

修改模板中的代码,利用Jinja2提供的内置函数range和过滤器length(别名:count)来实现编号的流水号排列:

{%for x in range(datas.items|count)%}
<tr>
    <td>{{10*(datas.page-1)+x+1}}</td>
    <td>{{datas.items[x].title}}</td>
    <td>{{datas.items[x].length}}分钟</td>
    <td>{{datas.items[x].tag.name}}</td>
    <td>{{datas.items[x].area}}</td>
    <td>{{datas.items[x].star}}</td>
    <td>{{datas.items[x].playnum}}</td>
    <td>{{datas.items[x].commentnum}}</td>
    <td>{{datas.items[x].addtime}}</td>
</tr>
{%endfor%}

Jinja2的内置函数range作用和python中的range函数作用类似,获得指定范围内的数字,过滤器length(别名:count)用来获得序列的长度。因为datas是一个Pagination类型对象,所以items返回的内容仅仅是该页中会呈现的内容序列。

因为使用了range,所以这次循环中的变量x为数字,用数字作为序列的下标到序列中取出内容进行处理。对于流水号的处理,因为每一页可以呈现的内容最多为10个,第一页数字从1开始到10,第二页数字从11开始到20,所以我们用10*(当前页-1)+x+1,让流水号按照我们希望的方式呈现。

猜你喜欢

转载自blog.csdn.net/piglite/article/details/82495580