如何使用web.py python中的列表中的结果进行分页

时间:2013-02-21 12:28:31

标签: python list pagination tuples web.py

我正在使用python web.py来设计一个小型的网络应用程序,这里实际上我没有使用任何数据库来获取结果/记录,我将有一个记录列表(我将从某些地方获取根据要求:))

以下是我的代码

code.py

import web
from web import form

urls = (
    '/', 'index',
    '/urls', 'urls_result',
)

app =  web.application(urls, globals())
render = web.template.render('templates/')

class index:
    def GET(self):
        return render.home()

    def POST(self):
        result_list = [('Images', 'http://www.google.co.in/imghp?hl=en&tab=wi'), 
                       ('Maps', 'http://maps.google.co.in/maps?hl=en&tab=wl'), 
                       ('Play', 'https://play.google.com/?hl=en&tab=w8'), 
                       ('YouTube', 'http://www.youtube.com/?gl=IN&tab=w1'), 
                       ('News', 'http://news.google.co.in/nwshp?hl=en&tab=wn'),  
                       ('Gmail', 'https://mail.google.com/mail/?tab=wm'), 
                       ('Drive', 'https://drive.google.com/?tab=wo'), 
                       ('More»', 'http://www.google.co.in/intl/en/options/'), 
                       ('Web History', 'http://www.google.co.in/history/optout?hl=en'), 
                       ('Settings', 'http://www.google.co.in/preferences?hl=en'), 
                       ('Sign in', 'https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.co.in/'), 
                       ('Advanced search', 'http://www.google.co.in/advanced_search?hl=en-IN&authuser=0'),
                       .............. 
                       ..............
                       .............. so on until 200 records      ]
        return render.recordslist(result_list)

if __name__ == "__main__":
    app.run()

home.html的

$def with()
<html>
 <head>
   <title>Home Page</title>
  <body alink="green" link="blue" >
    <div class="main">
      <center>
              <form method="POST" action='urls'>
                  <input class="button" type="submit" name="submit" value="Submit" />
              </form>
      </center>
     </div>
  </body>
</html>

recordslist.html

$def with(result_list)
<html>
 <head>
    <title>List of records</title> 
 </head>
 <body> 
   <table>
     $for link in result_list:
     <tr>
        <td>$link[0]</td>
        <td>$link[1]</td>
     </tr>    
   </table> 
 </body>

所以从上面的代码我正在做的是,当我运行服务器并使用从web.py返回的ip浏览器时,它被重定向到主页(使用url /和模板为home.html)由一个按钮构成。

现在我在这里没有使用任何database来获取记录,只是我拥有了list of tuples形式的硬编码记录,如上所示。

因此,当用户点击提交按钮时,我会以table的形式显示记录,方法是指向呈现模板的/url recordslist.html

现在上面的过程工作正常。但此处list of tuples/records可能最多200 or more,因此我想为pagination页面实施/url

我搜索了很多内容,发现所有点击都是从数据库中检索记录,但不是从列表中查找,我真的很困惑如何用10 pages for page对结果进行分页。

所以任何人都可以告诉我如何从上面的代码中列出结果/记录。

1 个答案:

答案 0 :(得分:1)

获取页面

首先,您必须从用户的请求中提取页面。假设您将使用页面查询字符串参数,您可以使用它来确定页码:

params = web.input()
page = params.page if hasattr(params, 'page') else 1

使用页面

一旦你有了一个页面,所有的分页涉及返回一片结果。以下函数应该为您提供所需的切片(假设页面是1索引的):

def get_slices(page, page_size=10):
    return (page_size * (page - 1), (page_size * page)

这将返回可用于切片结果列表的下限和上限。那么您目前return render.recordslist(result_list)的位置,您可以使用:

lower, upper = get_slices(page)
return render.recordslist(result_list[lower:upper])