from django.shortcuts import render from django.http import HttpResponse from django.template import Template from django.template import Context import markdown from bs4 import BeautifulSoup from .models import Site, Page _TEMPLATE = """ {{site_header | safe}} {{page_body | safe}} """ def get_site_header(site): template = Template(site.header) context = Context({"site": site}) return template.render(context) def get_index_body(site): template = Template(site.index) context = Context({"site": site}) return template.render(context) def index(request): site = Site.objects.get(pk=1) template = Template(_TEMPLATE) context = Context({"site": site, "site_header" : get_site_header(site), "page_body" : get_index_body(site)}) soup = BeautifulSoup(template.render(context)) return HttpResponse(soup.prettify()) def get_page_header(site: Site): pages = site.page_set.filter(navigable=True) template = Template(site.page_header) context = Context({"pages" : pages}) return template.render(context) def get_page_body(site: Site, page: Page): header = get_page_header(site) body = markdown.markdown(page.content) return header + body def get_page(name:str): site = Site.objects.get(pk=1) page = Page.objects.get(name=name) template = Template(_TEMPLATE) context = Context({"site": site, "site_header" : get_site_header(site), "page_body" : get_page_body(site, page)}) content = template.render(context) soup = BeautifulSoup(content, features="html.parser") return HttpResponse(soup.prettify()) def schedule(request): return get_page("Schedule") def things_to_do(request): return get_page("ThingsToDo") def travel(request): return get_page("Travel")