added post list template
This commit is contained in:
parent
437aff51e7
commit
2a9508e50b
3 changed files with 32 additions and 5 deletions
|
@ -71,7 +71,10 @@ class ZonaBuilder:
|
||||||
|
|
||||||
def _build(self):
|
def _build(self):
|
||||||
assert self.items
|
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}
|
self.item_map = {item.source.resolve(): item for item in self.items}
|
||||||
# print(item_map)
|
# print(item_map)
|
||||||
for item in self.item_map.values():
|
for item in self.item_map.values():
|
||||||
|
|
13
src/zona/data/templates/post_list.html
Normal file
13
src/zona/data/templates/post_list.html
Normal 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 %}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Literal
|
||||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||||
from zona.models import Item
|
from zona.models import Item
|
||||||
from zona.markdown import md_to_html
|
from zona.markdown import md_to_html
|
||||||
|
@ -23,7 +24,7 @@ def get_footer(template_dir: Path) -> str | None:
|
||||||
|
|
||||||
|
|
||||||
class Templater:
|
class Templater:
|
||||||
def __init__(self, template_dir: Path):
|
def __init__(self, template_dir: Path, post_list: list[Item]):
|
||||||
self.env: Environment = Environment(
|
self.env: Environment = Environment(
|
||||||
loader=FileSystemLoader(template_dir),
|
loader=FileSystemLoader(template_dir),
|
||||||
autoescape=select_autoescape(["html", "xml"]),
|
autoescape=select_autoescape(["html", "xml"]),
|
||||||
|
@ -31,18 +32,28 @@ class Templater:
|
||||||
self.template_dir: Path = template_dir
|
self.template_dir: Path = template_dir
|
||||||
self.header: str | None = get_header(template_dir)
|
self.header: str | None = get_header(template_dir)
|
||||||
self.footer: str | None = get_footer(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:
|
def render_item(self, item: Item, content: str) -> str:
|
||||||
env = self.env
|
env = self.env
|
||||||
meta = item.metadata
|
meta = item.metadata
|
||||||
assert meta is not None
|
assert meta is not None
|
||||||
template = env.get_template(meta.template)
|
template = env.get_template(
|
||||||
header = self.header if self.header and meta.header else False
|
meta.template
|
||||||
footer = self.footer if self.footer and meta.footer else False
|
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(
|
return template.render(
|
||||||
content=content,
|
content=content,
|
||||||
url=item.url,
|
url=item.url,
|
||||||
metadata=meta,
|
metadata=meta,
|
||||||
header=header,
|
header=header,
|
||||||
footer=footer,
|
footer=footer,
|
||||||
|
post_list=self.post_list,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue