wedding-site-backend/wedding_site/primary/views.py
2024-02-11 20:31:36 +00:00

78 lines
No EOL
1.9 KiB
Python

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 = """
<!DOCTYPE html>
<html>
<head>
{{site_header | safe}}
</head>
<body>
{{page_body | safe}}
</body>
</html>
"""
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")