112 lines
2.7 KiB
Python
112 lines
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())
|