Refactored blog home template
This commit is contained in:
parent
d81abaa984
commit
b8df9f73a0
8 changed files with 286 additions and 113 deletions
app
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue