wedding-site-backend/wedding_site/primary/views.py
2024-02-11 15:26:29 +00:00

112 lines
No EOL
2.7 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}}
</head>
<body>
{{page_body}}
</body>
</html>
"""
_BODY = """
<div class="site-tagline">SAVE <span class="site-tagline-span">the</span> DATE</div>
<div class="site-names">JAMES AND FIONNUALA</div>
<div class="login-input">
<form method="put" action="login">
<label for="pwd">Password:</label>
<input type="password" id="pwd" value="" name="token">
<input type="submit" value="Submit">
</form>
</div>
"""
_HEADER = """
<title>{{site.title}}</title>
<meta name="viewport"
content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/css/styles.css">
"""
def get_site_header(site):
template = Template(_HEADER)
context = Context({"site": site})
return template.render(context)
def get_index_body(site):
template = Template(_BODY)
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 schedule(request):
return get_page("Schedule")
def things_to_do(request):
return get_page("ThingsToDo")
def travel(request):
return get_page("Travel")
_PAGE_HEADER = """
<header>
<div class="main-nav">
<ul>
{% for page in pages %}
<li><a class="nav-button"
href="/{{page.pretty_name}}">{{page.name}}</a></li>
{% endfor %}
</ul>
</div>
</header>
"""
def get_page_header(site: Site):
pages = site.page_set.filter(navigable=True)
template = Template(_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)})
soup = BeautifulSoup(template.render(context))
return HttpResponse(soup.prettify())