65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
# Imports
|
|
from flask import Blueprint, render_template, request, abort, send_file
|
|
from os import getenv as env
|
|
import logging, os
|
|
|
|
|
|
# Create blueprint
|
|
bp = Blueprint(
|
|
'generic',
|
|
__name__,
|
|
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
|
|
static_folder=env('STATIC_FOLDER', default='../static')
|
|
)
|
|
|
|
|
|
# Create logger
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
# Route for index page
|
|
@bp.route('/')
|
|
def index():
|
|
return render_template('index.html')
|
|
|
|
|
|
# Route for favicon
|
|
@bp.route('/favicon.ico')
|
|
def favicon():
|
|
return send_file('../static/content/other/favicon.ico')
|
|
|
|
|
|
# Route for robots.txt
|
|
@bp.route('/robots.txt')
|
|
def robots():
|
|
return send_file('../static/content/other/robots.txt')
|
|
|
|
|
|
# Route for sitemap.xml
|
|
@bp.route('/sitemap.xml')
|
|
def sitemap():
|
|
return send_file('../static/content/other/sitemap.xml')
|
|
|
|
|
|
# Catch-all route for generic pages
|
|
@bp.route('/<path:filename>')
|
|
def catch_all(filename):
|
|
try: return render_template(f'pages/{filename if filename.endswith(".html") else filename + ".html"}')
|
|
except Exception as e:
|
|
# If the template is not found, check if it is a directory
|
|
os_path = os.path.join(bp.template_folder, 'pages', filename)[3:]
|
|
if os.path.isdir(os_path):
|
|
# walk through the directory and find all files
|
|
pages = []
|
|
for root, dirs, files_in_dir in os.walk(os_path):
|
|
for file in files_in_dir:
|
|
pages.append(os.path.relpath(os.path.join(root, file), os_path))
|
|
for dir in dirs:
|
|
pages.append(os.path.relpath(os.path.join(root, dir), os_path) + '/')
|
|
|
|
# If it is a directory, render a directory page
|
|
if not filename.endswith('/'): filename += '/'
|
|
return render_template('bases/directory.html', directory=filename, pages=pages)
|
|
|
|
# If it is a file, return a 404 error
|
|
abort(404, f"Template '{filename}' not found: {e}") |