web框架--tornado自定义分页

Posted 梦想一步登天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web框架--tornado自定义分页相关的知识,希望对你有一定的参考价值。

1、tornado_main.py

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 
  4 
  5
  6 
  7 import tornado.web
  8 import tornado.ioloop
  9 
 10 LIST_INFO = [
 11     {\'username\': \'yusheng\', \'email\': \'137@163.com\'}
 12 ]
 13 for i in range(200):
 14     temp = {\'username\': str(i) + "lys", \'email\': str(i) + "@163.com"}
 15     LIST_INFO.append(temp)
 16 
 17 
 18 class Pagenation:
 19 
 20     def __init__(self, current_page, all_item, base_url):  #当前页 内容总数 目录
 21         try:
 22             page = int(current_page)
 23         except:
 24             page = 1
 25         if page < 1:
 26             page = 1
 27 
 28         all_page, c = divmod(all_item, 5)
 29         if c > 0:
 30             all_page += 1
 31 
 32         self.current_page = page
 33         self.all_page = all_page
 34         self.base_url = base_url
 35 
 36     @property
 37     def start(self):
 38         return (self.current_page - 1) * 5
 39 
 40     @property
 41     def end(self):
 42         return self.current_page * 5
 43 
 44     def string_pager(self):
 45         list_page = []
 46         if self.all_page < 11:
 47             s = 1
 48             t = self.all_page + 1
 49         else:
 50             if self.current_page < 6:
 51                 s = 1
 52                 t = 12
 53             else:
 54                 if (self.current_page + 5) < self.all_page:
 55                     s = self.current_page-5
 56                     t = self.current_page + 6
 57                 else:
 58                     s = self.all_page - 11
 59                     t = self.all_page +1
 60 
 61         first = \'<a href = "/index/1">首页</a>\'
 62         list_page.append(first)
 63         # 当前页
 64         if self.current_page == 1:
 65             prev = \'<a href = "javascript:void(0):">上一页</a>\'
 66         else:
 67             prev = \'<a href = "/index/%s">上一页</a>\'%(self.current_page-1,)
 68         list_page.append(prev)
 69 
 70         #页码
 71         for p in range(s, t):
 72             if p== self.current_page:
 73                 temp = \'<a class = "active" href = "/index/%s">%s</a>\' % (p, p)
 74             else:
 75                 temp = \'<a href = "/index/%s">%s</a>\' % (p, p)
 76             list_page.append(temp)
 77 
 78 
 79 
 80         # 尾页
 81         if self.current_page == self.all_page:
 82             nex = \'<a href = "javascript:void(0):">下一页</a>\'
 83         else:
 84             nex = \'<a href = "/index/%s">下一页</a>\' % (self.current_page + 1,)
 85         list_page.append(nex)
 86 
 87         last = \'<a href = "/index/%s">尾页</a>\' % (self.all_page)
 88         list_page.append(last)
 89 
 90 
 91         #跳转
 92         jump = \'\'\'<input type="text"><a onclick = "Jump(\'%s\',this);">GO</a>\'\'\' % (\'/index/\')
 93         script = \'\'\'
 94             <script>
 95                 function Jump(baseUrl,ths){
 96                     var val = ths.previousElementSibling.value;
 97                     if (val.trim().length > 0){
 98                         location.href = baseUrl + val;
 99                     }
100                 }
101             </script>
102         \'\'\'
103         list_page.append(jump)
104         list_page.append(script)
105         str_page = "".join(list_page)
106 
107         return str_page
108 
109 class IndexHandler(tornado.web.RequestHandler):
110 
111     def get(self, page):
112         obj = Pagenation(page, len(LIST_INFO), \'/index/\')
113         current_list = LIST_INFO[obj.start:obj.end]
114         str_page = obj.string_pager()
115         self.render(\'index.html\', list_info=current_list, current_page=obj.current_page, str_page=str_page)
116 
117 application = tornado.web.Application([
118     (r\'/index/(?P<page>\\d*)\', IndexHandler)
119 
120 ])
121 
122 
123 if __name__ == "__main__":
124     application.listen(8080)
125     tornado.ioloop.IOLoop.instance().start()

2、index.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .pager a{
 8             display: inline-block;
 9             padding: 5px 6px;
10             margin: 10px 3px;
11             border: 1px solid #2b669a;
12             text-decoration:none;
13 
14         }
15         .pager a.active{
16             background-color: #2b669a;
17             color: white;
18         }
19     </style>
20 </head>
21 <body>
22     <h3>显示数据</h3>
23     <table border="1">
24         <thead>
25             <tr>
26                 <th>用户名</th>
27                 <th>邮箱</th>
28             </tr>
29         </thead>
30         <tbody>
31             {% for line in list_info %}
32                 <tr>
33                     <td>{{line[\'username\']}}</td>
34                     <td>{{line[\'email\']}}</td>
35                 </tr>
36             {% end %}
37         </tbody>
38     </table>
39     <div class="pager">
40         {% raw str_page %}
41     </div>
42 </body>
43 </html>

3、图示

以上是关于web框架--tornado自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

Tornado----自定义异步非阻塞Web框架:Snow

第二百六十七节,Tornado框架-分页封装模块

200行自定义异步非阻塞Web框架

200行自定义异步非阻塞Web框架

tornado1

200行自定义异步非阻塞Web框架