1

私はPythonweb.pyを使用して小さなWebアプリを設計しています。ここでは、実際には結果/レコードを取得するためにデータベースを使用していません。レコードのリストがあります(要件に応じてどこから取得します:))

以下は私のコードです

コード.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>

したがって、上記のコードから私がしていることは、サーバーを実行し、から返された ip でブラウザーをヒットすると、単一のボタンを備えたフォームで構成されるweb.pyホームページ (URL/とテンプレートを使用) にリダイレクトされます。home.html

ここではdatabase、レコードを取得するために何も使用していません。単純に、上記のような形式のハードコア レコードがありlist of tuplesます。

したがって、ユーザーが送信ボタンをクリックすると、そのレンダリング テンプレートtableに指示することにより、レコードが の形式で表示されます/urlrecordslist.html

現在、上記のプロセスは正常に機能しています。しかし、ここでlist of tuples/recordsは までの可能性が200 or moreあるので、ページに実装paginationしたいと思い/urlます。

私はたくさんグーグルで調べましたが、データベースからレコードを取得するためのすべてのヒットが見つかりましたが、リストからではなく、10 pages for page.

ですから、上記のコードのリストから結果/レコードをページ分割する方法を教えてください。

4

1 に答える 1

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])
于 2013-02-21T13:07:46.850 に答える