-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrender_website.py
68 lines (51 loc) · 1.74 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
import argparse
import json
import os
from jinja2 import Environment, FileSystemLoader, select_autoescape
from livereload import Server
from more_itertools import chunked
from functools import partial
BOOK_COUNT = 10
def create_parser():
"""create parser to add arguments"""
parser = argparse.ArgumentParser(
description="The script creates the site with books"
)
parser.add_argument(
"--json_path",
default="media/book_descriptions.json",
type=str,
help="path to JSON file, as default: '' "
)
return parser
def on_reload(json_path):
with open(json_path, "r", encoding="utf-8") as file:
book_descriptions = json.load(file)
chunked_descriptions_by_pages = list(chunked(book_descriptions, BOOK_COUNT))
page_folder = "pages"
os.makedirs(page_folder, exist_ok=True)
env = Environment(
loader=FileSystemLoader("."),
autoescape=select_autoescape(["html", "xml"])
)
template = env.get_template("template.html")
for number, page in enumerate(chunked_descriptions_by_pages, 1):
page_path = os.path.join(page_folder, f"index{number}.html")
rendered_page = template.render(
book_descriptions=page,
current_page=number,
page_count=len(chunked_descriptions_by_pages)
)
with open(page_path, "w", encoding="utf-8") as file:
file.write(rendered_page)
def main():
parser = create_parser()
args = parser.parse_args()
json_path = args.json_path
on_reload_pages = partial(on_reload, json_path=json_path)
on_reload_pages()
server = Server()
server.watch("template.html", on_reload_pages)
server.serve(root=".")
if __name__ == "__main__":
main()