-
Notifications
You must be signed in to change notification settings - Fork 0
/
render_website.py
69 lines (49 loc) · 1.8 KB
/
render_website.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import json
from math import ceil
from pathlib import Path
from jinja2 import Environment, FileSystemLoader, select_autoescape
from livereload import Server
from more_itertools import chunked
COLUMNS_ON_PAGE = 2
BOOKS_ON_PAGE = 10
PAGES_FOLDER = Path("./", "pages")
def fetch_json(json_file):
with open(json_file, "r") as library_file:
library_description = json.load(library_file)
return library_description
def get_html_template_env():
env = Environment(
loader=FileSystemLoader("."),
autoescape=select_autoescape(["html"])
)
template = env.get_template("template.html")
return template
def split_page(page):
col_length = ceil(len(page)/COLUMNS_ON_PAGE)
columned_page = list(chunked(page, col_length))
return columned_page
def on_reload():
library_content = fetch_json(
json_file="./books_description.json")
paged_library_content = list(chunked(library_content, n=BOOKS_ON_PAGE))
num_of_pages = len(paged_library_content)
no_picture_gif = "./images/nopic.gif"
template = get_html_template_env()
for num, page in enumerate(paged_library_content, start=1):
columned_page = split_page(page)
page_path = str(Path(PAGES_FOLDER, f"index{num}.html"))
rendered_page = template.render(
columned_library_page=columned_page,
no_pic=no_picture_gif,
num_of_pages=num_of_pages,
page_num=num)
with open(page_path, "w", encoding="utf8") as file:
file.write(rendered_page)
def main():
PAGES_FOLDER.mkdir(parents=True, exist_ok=True)
on_reload()
server = Server()
server.watch("template.html", on_reload)
server.serve(root=".")
if __name__ == "__main__":
main()