diff --git a/src/zona/builder.py b/src/zona/builder.py index a429034..b181733 100644 --- a/src/zona/builder.py +++ b/src/zona/builder.py @@ -71,7 +71,10 @@ class ZonaBuilder: def _build(self): assert self.items - templater = Templater(self.layout.templates) + post_list: list[Item] = [item for item in self.items if item.post] + templater = Templater( + template_dir=self.layout.templates, post_list=post_list + ) self.item_map = {item.source.resolve(): item for item in self.items} # print(item_map) for item in self.item_map.values(): diff --git a/src/zona/data/templates/post_list.html b/src/zona/data/templates/post_list.html new file mode 100644 index 0000000..b095510 --- /dev/null +++ b/src/zona/data/templates/post_list.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} + +{% block content %} +

{{ metadata.title }}

+{% if post_list %} + +{% endif %} +{% endblock %} + diff --git a/src/zona/templates.py b/src/zona/templates.py index a9e3979..4c79460 100644 --- a/src/zona/templates.py +++ b/src/zona/templates.py @@ -1,4 +1,5 @@ from pathlib import Path +from typing import Literal from jinja2 import Environment, FileSystemLoader, select_autoescape from zona.models import Item from zona.markdown import md_to_html @@ -23,7 +24,7 @@ def get_footer(template_dir: Path) -> str | None: class Templater: - def __init__(self, template_dir: Path): + def __init__(self, template_dir: Path, post_list: list[Item]): self.env: Environment = Environment( loader=FileSystemLoader(template_dir), autoescape=select_autoescape(["html", "xml"]), @@ -31,18 +32,28 @@ class Templater: self.template_dir: Path = template_dir self.header: str | None = get_header(template_dir) self.footer: str | None = get_footer(template_dir) + self.post_list: list[Item] = post_list def render_item(self, item: Item, content: str) -> str: env = self.env meta = item.metadata assert meta is not None - template = env.get_template(meta.template) - header = self.header if self.header and meta.header else False - footer = self.footer if self.footer and meta.footer else False + template = env.get_template( + meta.template + if meta.template.endswith(".html") + else meta.template + ".html" + ) + header: str | Literal[False] = ( + self.header if self.header and meta.header else False + ) + footer: str | Literal[False] = ( + self.footer if self.footer and meta.footer else False + ) return template.render( content=content, url=item.url, metadata=meta, header=header, footer=footer, + post_list=self.post_list, )