Refactored blog home template

This commit is contained in:
Fabio Manganiello 2021-01-24 23:24:49 +01:00
parent d81abaa984
commit b8df9f73a0
8 changed files with 286 additions and 113 deletions

View file

@ -1,11 +1,12 @@
import datetime
import os
import re
from glob import glob
from typing import Optional
from markdown import markdown
from flask import Flask, abort, send_from_directory, render_template
from markdown import markdown
basedir = os.path.abspath(os.path.join(os.path.realpath(__file__), '..', '..'))
templates_dir = os.path.join(basedir, 'templates')
@ -33,6 +34,8 @@ def get_page_metadata(page: str) -> dict:
metadata = {}
with open(os.path.join(pages_dir, page), 'r') as f:
metadata['uri'] = '/article/' + page[:-3]
for line in f.readlines():
if not line:
continue
@ -40,7 +43,10 @@ def get_page_metadata(page: str) -> dict:
if not (m := re.match(r'^\[//]: # \(([^:]+):\s*([^)]+)\)\s*$', line)):
break
metadata[m.group(1)] = m.group(2)
if m.group(1) == 'published':
metadata[m.group(1)] = datetime.date.fromisoformat(m.group(2))
else:
metadata[m.group(1)] = m.group(2)
return metadata
@ -52,15 +58,27 @@ def get_page(page: str, title: Optional[str] = None):
metadata = get_page_metadata(page)
with open(os.path.join(pages_dir, page), 'r') as f:
return render_template('article.html',
title=title if title else metadata.get('title', 'Platypush Blog'),
published=(datetime.date.fromisoformat(metadata['published']).strftime('%b %d, %Y')
title=title if title else metadata.get('title', 'Platypush blog'),
image=metadata.get('image'),
description=metadata.get('description'),
published=(metadata['published'].strftime('%b %d, %Y')
if metadata.get('published') else None),
content=markdown(f.read(),extensions=['fenced_code', 'codehilite']))
def get_pages() -> list:
return sorted([
{
'path': path,
**get_page_metadata(os.path.basename(path)),
}
for path in glob(os.path.join(pages_dir, '*.md'))
], key=lambda page: page.get('published'), reverse=True)
@app.route('/', methods=['GET'])
def home_route():
return get_page('Home', title='Platypush Blog')
return render_template('index.html', pages=get_pages())
@app.route('/favicon.ico', methods=['GET'])
@ -78,9 +96,6 @@ def css_route(style: str):
return send_from_directory(css_dir, style)
@app.route('/<path:path>', methods=['GET'])
def catch_all(path: str):
if path.endswith('.md'):
return get_page(path)
abort(404)
@app.route('/article/<article>', methods=['GET'])
def article_route(article: str):
return get_page(article)