feat: added linked article to context

This commit is contained in:
Hazel Noack 2025-05-19 15:05:37 +02:00
parent 693022ac23
commit e3fe49bed7
3 changed files with 48 additions and 1 deletions

View File

@ -4,7 +4,7 @@ dependencies = [
"watchdog~=6.0.0",
"markdown~=3.3.6",
"bs4~=0.0.2",
"toml~0.10.2",
"toml~=0.10.2",
"jinja2~=3.1.6",
]
dynamic = []

View File

@ -30,6 +30,34 @@
</div>
</section>
{% if linked|length %}
<section class="section">
<div class="content">
<div class="columns is-multiline">
{% for c in linked %}
<div class="column is-half">
<div class="card mb-4" >
<a href="{{c.url}}" hreflang="{{c.language.code}}" class="card mb-4" style="color: inherit; text-decoration: none;">
<div class="card-content">
<p class="title">{{c.title}}</p>
<hr />
<p class="content">
{{c.preview}}
</p>
</div>
<div class="card-footer">
<time class="card-footer-item" datetime="{{c.meta.iso_date}}">{{c.meta.date}}</time>
</div>
</a>
</div>
</div>
{% endfor %}
</div>
</div>
</section>
{% endif %}
{% if children|length %}
<section class="section">
<div class="content">

View File

@ -178,13 +178,25 @@ class ArticleTranslation:
if self.language_code in c.article_translations_map
]
self.linked_context = self.context["linked"] = []
def __init_content_context__(self):
template = jinja2.Template(self.html_content)
template.environment.accessed_keys = []
template.environment.context_class = ContextDict
self.html_content = template.render({
**CROSS_ARTICLE_CONTEXT,
**TRANSLATED_CROSS_ARTICLE_CONTEXT[self.language_code],
})
template.environment.context_class = jinja2.runtime.Context
accessed_keys = template.environment.accessed_keys
for key in accessed_keys:
a = ARTICLE_LAKE[key]
if self.language_code in a.article_translations_map:
self.linked_context.append(a.article_translations_map[self.language_code].context)
self.context["content"] = self.html_content
self.context["preview"] = get_preview_text(html_string=self.html_content)
@ -297,6 +309,13 @@ class Article:
ac.build()
class ContextDict(jinja2.runtime.Context):
def resolve_or_missing(self, key: str) -> Any:
self.environment.accessed_keys.append(key)
return super().resolve_or_missing(key)
# GLOBALS
logger = logging.getLogger("stsg.build")
CROSS_ARTICLE_CONTEXT: Dict[str, Dict[str, Any]] = {}