From 56370167e1d568eefa6be7268ce61e4791f6c294 Mon Sep 17 00:00:00 2001 From: Ant Zucaro Date: Mon, 16 May 2011 14:34:19 -0400 Subject: [PATCH] Start work on pagination for games: new view, route, and template. --- xonstat/__init__.py | 6 ++++++ xonstat/templates/game_index.mako | 17 +++++++++++++++++ xonstat/views.py | 27 ++++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100755 xonstat/templates/game_index.mako diff --git a/xonstat/__init__.py b/xonstat/__init__.py index ff90a62..3da1fcf 100755 --- a/xonstat/__init__.py +++ b/xonstat/__init__.py @@ -28,6 +28,12 @@ def main(global_config, **settings): config.add_route(name="player_info", pattern="/player/{id:\d+}", view=player_info, renderer='player_info.mako') + config.add_route(name="game_index", pattern="/games", view=game_index, + renderer='game_index.mako') + + config.add_route(name="game_index_paged", pattern="/games/page/{page:\d+}", + view=game_index, renderer='game_index.mako') + config.add_route(name="game_info", pattern="/game/{id:\d+}", view=game_info, renderer='game_info.mako') diff --git a/xonstat/templates/game_index.mako b/xonstat/templates/game_index.mako new file mode 100755 index 0000000..56cb2a5 --- /dev/null +++ b/xonstat/templates/game_index.mako @@ -0,0 +1,17 @@ +<%inherit file="base.mako"/> + +<%block name="title"> +Game Index - ${parent.title()} + + +% if not games: +

Sorry, no games yet. Get playing!

+ +% else: +

Recent Games

+ +% endif diff --git a/xonstat/views.py b/xonstat/views.py index 3769cec..3f9c58a 100755 --- a/xonstat/views.py +++ b/xonstat/views.py @@ -3,6 +3,7 @@ import time import re from pyramid.response import Response from pyramid.view import view_config +from webhelpers.paginate import Page, PageURL from xonstat.models import * from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound @@ -36,7 +37,8 @@ def player_info(request): player = DBSession.query(Player).filter_by(player_id=player_id).one() recent_games = DBSession.query("game_id", "server_id", "server_name", "map_id", "map_name").\ - from_statement("select g.game_id, s.server_id, s.name as server_name, m.map_id, m.name as map_name " + from_statement("select g.game_id, s.server_id, " + "s.name as server_name, m.map_id, m.name as map_name " "from player_game_stats gs, games g, servers s, maps m " "where gs.player_id=:player_id " "and gs.game_id = g.game_id " @@ -57,6 +59,29 @@ def player_info(request): # This is the game views area - only views pertaining to Xonotic # games and their related information goes here ########################################################################## +def page_url(page): + return current_route_url(request, page=page, _query=request.GET) + +def game_index(request): + if 'page_number' in request.matchdict: + current_page = request.matchdict['page_number'] + else: + current_page = 1 + + games_q = DBSession.query("game_id", "server_id", "server_name", + "map_id", "map_name").\ + from_statement("select g.game_id, s.server_id, " + "s.name as server_name, m.map_id, m.name as map_name " + "from games g, servers s, maps m " + "where g.server_id = s.server_id " + "and g.map_id = m.map_id " + "order by g.start_dt desc") + + games = Page(games_q, current_page, url=page_url) + + return {'games':games} + + def game_info(request): game_id = request.matchdict['id'] try: -- 2.39.2