Files
alfieking.dev/src/routes/dynamic_routes.py
Alfie King b4e6b4c296
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 6m3s
scratch
2026-02-09 13:34:47 +00:00

54 lines
1.9 KiB
Python

# Imports
from flask import Blueprint, render_template, abort
from os import getenv as env
import logging, os, re, markdown
# Create blueprint
bp = Blueprint(
'dynamic_routes',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Get all files in folder
def ListFiles(path):
path = os.path.join(bp.template_folder, 'pages', path)[3:]
files = []
for root, dirs, files_in_dir in os.walk(path):
for file in files_in_dir:
files.append(os.path.relpath(os.path.join(root, file), path))
for dir in dirs:
files.append(os.path.relpath(os.path.join(root, dir), path) + '/')
return files
# Catch-all route for generic pages
@bp.route('/<path:filename>')
def catch_all(filename):
if os.path.exists(os.path.join(bp.template_folder, 'pages', filename)[3:]):
return render_template(f'pages/{filename}')
elif os.path.exists(os.path.join(bp.template_folder, 'pages', filename + '.html')[3:]):
return render_template(f'pages/{filename}.html')
elif os.path.exists(os.path.join(bp.template_folder, 'pages', filename + '.md')[3:]):
print("yay")
print(markdown.markdownFromFile("../templates/pages/test.md"))
return render_template(
f'bases/md.html',
title = filename.split("/")[-1],
markdown = markdown.markdownFromFile(os.path.join(bp.template_folder, 'pages', filename + '.md'))
)
elif os.path.isdir(os.path.join(bp.template_folder, 'pages', filename)[3:]):
return render_template(
'bases/directory.html',
directory=filename + "/" if not filename.endswith('/') else filename,
pages=ListFiles(filename)
)
else:
abort(404, f"'{filename}' not found")