-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender_website.py
More file actions
66 lines (55 loc) · 1.97 KB
/
Copy pathrender_website.py
File metadata and controls
66 lines (55 loc) · 1.97 KB
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
import json
from pathlib import Path
from livereload import Server
from more_itertools import chunked
from jinja2 import Environment, FileSystemLoader, select_autoescape
def get_descriptions():
with open("books_descriptions.json", "r") as file:
descriptions = json.load(file)
for description in descriptions:
description["book_path"] = description["book_path"].replace("\\", "/")
description["img_src"] = description["img_src"].replace("\\", "/")
return descriptions
def arrange_descriptions(descriptions):
descriptions_per_line = 2
lines_per_page = 10
lined_descriptions = [chunk for chunk in chunked(
descriptions, descriptions_per_line
)]
paged_descriptions = [chunk for chunk in chunked(
lined_descriptions, lines_per_page
)]
return paged_descriptions
def on_reload():
descriptions = get_descriptions()
pages_folder_name = "pages"
Path(f"./{pages_folder_name}").mkdir(parents=True, exist_ok=True)
paged_descriptions = arrange_descriptions(descriptions)
env = Environment(
loader=FileSystemLoader("."),
autoescape=select_autoescape(["html", "xml"])
)
template = env.get_template("template.html")
pages_nums = [num for num, _ in enumerate(paged_descriptions, 1)]
for number, page in enumerate(paged_descriptions, 1):
rendered_page = template.render(
pages_nums=pages_nums,
number=number,
page=page,
)
if number == 1:
with open("./index.html", "w", encoding="utf8") as file:
file.write(rendered_page.replace("./", "/"))
with open(
f"./{pages_folder_name}/index{number}.html",
"w",
encoding="utf8",
) as file:
file.write(rendered_page)
def main():
on_reload()
server = Server()
server.watch("template.html", on_reload)
server.serve(root=".")
if __name__ == "__main__":
main()