Browse Source

feat: 排行榜分页显示

SongZihuan 3 years ago
parent
commit
b86697486f
4 changed files with 18 additions and 9 deletions
  1. 6 4
      app/rank/views.py
  2. 1 1
      app/static/styles/base.css
  3. 1 0
      app/templates/rank/ranking.html
  4. 10 4
      app/web.py

+ 6 - 4
app/rank/views.py

@@ -13,8 +13,9 @@ def rank_up():
     except (ValueError, TypeError):
         abort(404)
     else:
-        data = views.website.get_rank(page, "DESC")
-        return render_template("rank/ranking.html", rank_info=data, ranking_name="高分榜")
+        data, page_list = views.website.get_rank(page, "DESC", "rank_up")
+        return render_template("rank/ranking.html", rank_info=data, ranking_name="高分榜",
+                               page_list=page_list, page=page)
 
 
 @rank.route('/down')
@@ -24,8 +25,9 @@ def rank_down():
     except (ValueError, TypeError):
         abort(404)
     else:
-        data = views.website.get_rank(page, "ASC")
-        return render_template("rank/ranking.html", rank_info=data, ranking_name="警示榜")
+        data, page_list = views.website.get_rank(page, "ASC", "rank_down")
+        return render_template("rank/ranking.html", rank_info=data, ranking_name="警示榜",
+                               page_list=page_list, page=f"{page}")
 
 
 def creat_ranking_website(app_: Flask):

+ 1 - 1
app/static/styles/base.css

@@ -164,7 +164,7 @@ a.nav-top-item:hover, a.nav-top-item:active {
 }
 
 #last-p {
-    margin-top: 5%;
+    padding-top: 150px;
 }
 
 /* 用于解决父元素高度坍塌 */

+ 1 - 0
app/templates/rank/ranking.html

@@ -13,4 +13,5 @@
     <ul id="ranking">
         {{ rank.get_rank(rank_info) }}
     </ul>
+    {{ macro.get_page_list(page_list, page) }}
 {% endblock %}

+ 10 - 4
app/web.py

@@ -103,21 +103,27 @@ class StoreWebsite(WebsiteBase):
 
 
 class RankWebsite(WebsiteBase):
-    def get_rank(self, page: int, order_by: str = "DESC") -> Optional[List[Tuple]]:
+    def get_rank(self, page: int, order_by: str = "DESC", url: str = "rank_up"):
+        cur = self._db.search(columns=['count(UserID)'], table='user')
+        if cur is None:
+            return None, None
+        assert cur.rowcount == 1
+        count = math.ceil(int(cur.fetchone()[0]) / 20)
+
         offset = 20 * (page - 1)
         cur = self._db.search(columns=['UserID', 'Name', 'Score', 'Reputation'],
                               table='user',
                               where='IsManager=0',
                               order_by=[('Reputation', order_by), ('Score', order_by), ('UserID', order_by)],
                               limit=20,
-                              offset=offset)
+                              offset=offset)  # TODO 封装该函数
         if cur is None:
-            return None
+            return None, None
         res = []
         for index in range(cur.rowcount):
             i = cur.fetchone()
             res.append((f"{offset + index + 1}", i[1], i[0][:Config.tk_show_uid_len], str(i[3]), str(i[2])))
-        return res
+        return res, get_page(f"rank.{url}", page, count)
 
 
 class NewsWebsite(WebsiteBase):