import streamlit as st import re from pathlib import Path import yaml REGEX_YAML_BLOCK = re.compile(r"---[\n\r]+([\S\s]*?)[\n\r]+---[\n\r](.*)", re.DOTALL) def render_preview(image, title, description): with st.container(): image_col, text_col = st.columns((1,2)) with image_col: st.image(image) with text_col: st.subheader(title) st.write(description) clicked = st.button("Read more...", key=title) return clicked def render_page(post_path: Path): text = post_path.read_text() match = REGEX_YAML_BLOCK.search(text) page_content = match.group(2) if match else text st.markdown(page_content, unsafe_allow_html=True) def get_page_data(post_path: Path): text = post_path.read_text() match = REGEX_YAML_BLOCK.search(text) if match: data = match.group(1) data = yaml.load(data, Loader=yaml.FullLoader) return data return {} def main(): st.set_page_config(layout="wide") posts = ['posts/hello_world.md', 'posts/check_this_out.md'] page_to_show = None with st.sidebar: st.markdown('''

A Test Blog!

[![Github Badge](https://img.shields.io/github/stars/nateraw/host-a-blog-on-huggingface-spaces?style=social)](https://github.com/nateraw/host-a-blog-on-huggingface-spaces)
''', unsafe_allow_html=True) st.markdown('---') for post in posts: data = get_page_data(Path(post)) clicked = render_preview(data.get("thumbnail"), data.get("title"), data.get("description")) if clicked: page_to_show = post if page_to_show: render_page(Path(page_to_show)) main()