From c61adad1806142a917f9d1b888443630afacd41c Mon Sep 17 00:00:00 2001 From: Lukas Kucharczyk Date: Sun, 11 Aug 2024 18:21:11 +0200 Subject: [PATCH] list games --- games/gameviews.py | 73 +++++++++++++++++++++++++++++++++++++ games/templates/navbar.html | 2 +- games/urls.py | 3 +- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 games/gameviews.py diff --git a/games/gameviews.py b/games/gameviews.py new file mode 100644 index 0000000..3755f33 --- /dev/null +++ b/games/gameviews.py @@ -0,0 +1,73 @@ +from typing import Any + +from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator +from django.http import HttpRequest, HttpResponse +from django.shortcuts import render +from django.template.loader import render_to_string +from django.urls import reverse + +from games.models import Game +from games.views import dateformat + + +@login_required +def list_games(request: HttpRequest) -> HttpResponse: + context: dict[Any, Any] = {} + page_number = request.GET.get("page", 1) + limit = request.GET.get("limit", 10) + games = Game.objects.order_by("-created_at") + page_obj = None + if int(limit) != 0: + paginator = Paginator(games, limit) + page_obj = paginator.get_page(page_number) + games = page_obj.object_list + + context = { + "title": "Manage games", + "page_obj": page_obj or None, + "elided_page_range": ( + page_obj.paginator.get_elided_page_range( + page_number, on_each_side=1, on_ends=1 + ) + if page_obj + else None + ), + "data": { + "columns": [ + "Name", + "Sort Name", + "Year", + "Wikidata", + "Created", + "Actions", + ], + "rows": [ + [ + game.name, + game.sort_name, + game.year_released, + game.wikidata, + game.created_at.strftime(dateformat), + render_to_string( + "components/button_group_sm.html", + { + "buttons": [ + { + "href": reverse("edit_game", args=[game.pk]), + "text": "Edit", + }, + { + "href": reverse("delete_game", args=[game.pk]), + "text": "Delete", + "color": "red", + }, + ] + }, + ), + ] + for game in games + ], + }, + } + return render(request, "list_purchases.html", context) diff --git a/games/templates/navbar.html b/games/templates/navbar.html index 56d6ea9..c4eb33e 100644 --- a/games/templates/navbar.html +++ b/games/templates/navbar.html @@ -99,7 +99,7 @@ class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Devices
  • - Games
  • diff --git a/games/urls.py b/games/urls.py index 5992d0e..ae2b391 100644 --- a/games/urls.py +++ b/games/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from games import deviceviews, purchaseviews, sessionviews, views +from games import deviceviews, gameviews, purchaseviews, sessionviews, views urlpatterns = [ path("", views.index, name="index"), @@ -21,6 +21,7 @@ urlpatterns = [ path("game//edit", views.edit_game, name="edit_game"), path("game//view", views.view_game, name="view_game"), path("game//delete", views.delete_game, name="delete_game"), + path("game/list", gameviews.list_games, name="list_games"), path("platform/add", views.add_platform, name="add_platform"), path("platform//edit", views.edit_platform, name="edit_platform"), path("purchase/add", views.add_purchase, name="add_purchase"),