使用带有web2py中的分页的2列表来枚举记录

时间:2014-11-05 15:11:54

标签: mongodb pagination web2py enumerate

我有一个简单的Web应用程序,可以显示存储在MongoDB中的产品。我可以轻松地通过网格进行枚举,在每个页面上显示一个20 x 1的表格。但是,我不想显示一个20 x 1的表,而是在保持分页完整性的同时显示一个20 x 2的表。

我的控制器:

def products():
  if len(request.args): page=int(request.args[0])
  else: page=0
  items_per_page=20
  limitby=(page*items_per_page,(page+1)*(items_per_page+1))
  qset = db(db['products']['name']!='None')
  grid = qset.select(limitby=limitby)
  return dict(grid=grid,page=page,items_per_page=items_per_page)

我的观点:

{{extend 'layout.html'}}
<h2>Browse available products:</h2>

<table class="products">
{{for i, row in enumerate(grid):}}
{{if i==items_per_page:break}}
<tr>
<td>{{=row.name}}</td>
{{pass}}
</tr>
</table>

{{if page:}}
<a href="{{=URL(args=[page-1])}}">previous</a>
{{pass}}

{{if len(grid)>items_per_page:}}
<a href="{{=URL(args=[page+1])}}">next</a>
{{pass}}

这应该是一项非常简单的任务,但我要把它变得更加困难。我可以在我的控制器中定义两个单独的数据库查询,然后在我的视图中定义两个单独的表,但这看起来似乎是一种荒谬的方法。

1 个答案:

答案 0 :(得分:0)

首先,加倍items_per_page

    items_per_page = 40

然后在视图中,您可以执行以下操作:

{{num_records = min(items_per_page, len(grid))}}
{{for row in xrange((num_records / 2) + (num_records % 2)):}}
<tr>
  <td>{{=grid[row * 2].name}}</td>
  <td>{{=grid[row * 2 + 1].name if row * 2 + 1 <= num_records - 1 else ''}}</td>
</tr>
{{pass}}

此外,您的控制器代码中存在错误:

(page + 1) * (items_per_page + 1)

应该是:

(page + 1) * items_per_page + 1