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 %}
+
+ {% for item in post_list %}
+ - {{ item.metadata.title }}
+ {% endfor %}
+
+{% 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,
)