from flask import Flask, render_template import os import re app = Flask(__name__) gallery_root = "/app/gallery" get_num_regex = re.compile(r'\d+') @app.route('/') def render_gallery(): gallery_names = [] with os.scandir(gallery_root) as galleries: for gallery in galleries: if not gallery.is_file(): gallery_names.append(gallery.name) gallery_names.sort() return render_template( 'gallery.html', galleries=gallery_names ) def get_page_number_from_name(name): try: return int(get_num_regex.findall(name)[-1]) except IndexError: print ("Index error on name " + name, flush=True) return -1 @app.route('/') def render_pages(gallery=None): template_pages = [] with os.scandir(gallery_root + "/" + gallery) as pages: for page in pages: if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'): template_pages.append({ 'name': page.name, 'number': get_page_number_from_name(page.name) }) template_pages = sorted(template_pages, key=lambda page: page['number']) return render_template( 'pages.html', gallery=gallery, pages=template_pages ) @app.route('//') def render_page(gallery=None, page_num=None): # find a page that I think corrosponds to this page number page_name = None with os.scandir(gallery_root + "/" + gallery) as pages: for page in pages: if page.is_file(): num = get_page_number_from_name(page.name) if int(page_num) == int(num): page_name = page.name break # if found, create src link to that page if page_name: src = '/images/{}/{}'.format( gallery, page_name ) prev_page_url = "/{}/{}".format( gallery, page_num - 1) next_page_url = "/{}/{}".format( gallery, page_num + 1) return render_template( 'page.html', gallery=gallery, page_num=page_num, title=page_name, src=src, alt=page_name, prev_page_url=prev_page_url, next_page_url=next_page_url ) else: return 'No page found'