added post list template

This commit is contained in:
Daniel Fichtinger 2025-06-27 23:29:43 -04:00
parent 437aff51e7
commit 2a9508e50b
3 changed files with 32 additions and 5 deletions

View file

@ -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():

View file

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block content %}
<center><h1>{{ metadata.title }}</h1></center>
{% if post_list %}
<ul>
{% for item in post_list %}
<li>{{ item.metadata.title }}</li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}

View file

@ -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,
)