From 43b74c15217e5f104321eb99c5cc503d49718b71 Mon Sep 17 00:00:00 2001 From: Miguel Astor Date: Sat, 19 Aug 2023 23:37:19 -0400 Subject: [PATCH] Added page navigation buttons to the gallery view. --- viewer/static/imgs/forward.png | Bin 0 -> 17971 bytes viewer/templates/gallery_view.html | 56 +++++++++++++++++++---------- viewer/views.py | 17 ++++++--- 3 files changed, 50 insertions(+), 23 deletions(-) create mode 100755 viewer/static/imgs/forward.png diff --git a/viewer/static/imgs/forward.png b/viewer/static/imgs/forward.png new file mode 100755 index 0000000000000000000000000000000000000000..89a062757f954b1791dcd0473761e87d42ab32f6 GIT binary patch literal 17971 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 {% for page in pages %}{{page}}{% if not forloop.last %} {% endif %}{% endfor %} - - - {% for row in images %} - - {% for cell in row %} - - {% endfor %} - - {% endfor %} - +
- - -
- - {{cell.path|truncatechars:15}} - -
-
+ + {% if page != 1 %} + + {% endif %} + + {% if page != num_pages %} + + {% endif %} +
+ + + + + + + {% for row in images %} + + {% for cell in row %} + + {% endfor %} + + {% endfor %} + +
+ + +
+ + {{cell.path|truncatechars:15}} + +
+
+
+ + + +
{% endif %} diff --git a/viewer/views.py b/viewer/views.py index d7a12a3..704f3b0 100644 --- a/viewer/views.py +++ b/viewer/views.py @@ -53,13 +53,14 @@ def gallery_view(request, path = None): subdirs = sorted([i for i in full_path.iterdir() if i.is_dir()]) images = sorted([i for i in full_path.iterdir() if i.is_file() and filetype.is_image(str(i))]) img_data = [] + num_pages = ceil((len(images) / CELLS_PER_ROW) / ROWS_PER_PAGE) try: - page = int(request.GET.get('page', 1)) - 1 + page = int(request.GET.get('page', 1)) except ValueError: - page = 0 + page = 1 - page_base = IMAGES_PER_PAGE * page + page_base = IMAGES_PER_PAGE * (page - 1) for image in images[page_base : page_base + IMAGES_PER_PAGE]: make_thumbnail(image) @@ -72,12 +73,18 @@ def gallery_view(request, path = None): img_data.append(img_context) + print(page) + context = { 'path': path, 'subdirs': list2rows(subdirs), 'images': list2rows(img_data), - 'pages': range(1, ceil((len(images) / CELLS_PER_ROW) / ROWS_PER_PAGE) + 1), - 'num_files': len(images) + 'pages': range(1, num_pages + 1), + 'num_files': len(images), + 'page': page, + 'prev_page': page - 1, + 'next_page': page + 1, + 'num_pages': num_pages } return render(request, 'gallery_view.html', context)