Een sjabloon haalt nooit zelf iets op. Het krijgt een bundel kant-en-klare waarden — FolioPress noemt dat de context — en drukt af wat het nodig heeft. Een deel van de bundel is op elke pagina hetzelfde; de rest hangt af van welk sjabloon wordt gerenderd.
Gemeenschappelijk voor alle sjablonen
Variabele Wat het is
page De getoonde pagina of het bericht, al in de huidige taal (zie hieronder). None in het tagarchief en bij zoeken.
site_title, site_description, footer Uit de Website-instellingen, in de huidige taal. footer is al vanuit Markdown gerenderd.
navigation_menu Het menu zoals ingesteld in het beheer: een lijst van {title, url, slug, page_id}, elke url klaar voor deze taal.
languages De talen van de website, op code. Elk item: code, name, native_name, short_code, menu_label, flag.
current_language, current_language_code, default_language_code De taal die wordt gerenderd (zelfde vorm als een languages-item), de code ervan en de hoofdtaal van de website.
language_switch_urls Op taalcode: de URL van deze zelfde pagina in die taal, vertaalde slug inbegrepen.
home_url, url_language_code De startpagina in de huidige taal (/ of /pt-pt) en het kleingeschreven voorvoegsel voor elke URL die je zelf bouwt ('' voor de hoofdtaal).
static_url, media_url Waar de bestanden van dit thema vandaan worden geleverd (/static/<thema>) en waar geüploade afbeeldingen staan.
page_title, meta_description, canonical_url, hreflang_urls, social_image_url, twitter_card_type, json_ld Alles wat de <head> nodig heeft: een zinnige tabbladtitel, absolute canonieke en taalalternatieve URL’s, een Open Graph-afbeelding en gestructureerde gegevens — alles vooraf berekend.
theme_name, theme_info, theme_settings De naam van het actieve thema, zijn volledige theme.yml en het settings-blok daarvan.
t De vertaler van het thema zelf: {{ t('Read more') }} zoekt de zin op in locales/<taal>.json (zie hieronder).
request Het FastAPI-verzoek, voor het zeldzame geval dat je het pad of een queryparameter nodig hebt.
Het page-object
Dezelfde vorm, of het nu een pagina, een bericht of een item in een berichtenlijst is:
Veld Opmerkingen
title, slug, url In de huidige taal. url is volledig, inclusief taalvoorvoegsel of het eigen domein van de taal.
content Al omgezet van Markdown naar HTML — afdrukken met {{ page.content | safe }}.
excerpt, meta_description De korte vormen, in de huidige taal.
poster_image_url Volledige URL van de omslagafbeelding, of None.
gallery, content_gallery Afbeeldingslijsten: {id, url, title, width, height, original_filename}. Gebruik image.url rechtstreeks.
tags {slug, title, url} voor elke openbare tag. Privétags worden nooit opgenomen.
is_post, is_featured, published_at, created_at, updated_at Of het een bericht is, of het uitgelicht is, en de datums.
id Het database-id — handig voor ankers en cachesleutels.
Berichtenlijsten
Sjabloon Variabele Inhoud
home.html posts (alias recent_posts), pages, is_home Berichten die een tag delen met de startpagina, in aantal en volgorde uit de sectie home van theme.yml. Een startpagina zonder tags krijgt geen berichten — geef haar een tag om haar te vullen.
page.html posts (alias page_posts) Berichten die een tag delen met deze pagina, uit de sectie page. Zo toont een “Blog”-pagina haar berichten.
post.html related_posts, is_post Andere berichten die een tag delen met dit bericht, uit de sectie post.
tag.html tag (title, slug), posts Elk gepubliceerd bericht met deze tag, uit de sectie tag.
search.html search_query, search_results, results_count De gezochte term en de overeenkomende pagina’s en berichten.
Elke berichtenlijst komt met een paginering van dezelfde vorm: has_pagination, current_page, total_pages, has_previous, has_next, previous_page, next_page en pagination_urls met first, previous, next en last — None waar er niets meer is. Staat has_pagination in theme.yml uit, dan wordt de lijst gewoon afgekapt op posts en blijven de vlaggen onwaar.
Talen en de kiezer
Twee van de taalvelden worden voor je berekend. short_code is alleen de taalcode — EN — tenzij de website ook een andere variant van dezelfde taal heeft ingeschakeld; dan behoudt hij zijn regio: EN-US en EN-GB. menu_label volgt dezelfde regel met namen: English, of English (US) en English (UK). Dat is precies de regel van de taalkiezer in het beheer, zodat website en beheer het nooit oneens zijn over een label. Een volledige kiezer is daarom kort:
{% if languages | length > 1 %} <button type="button" aria-label="{{ t('Change language') }}"> {{ current_language.short_code }} </button> <ul> {% for lang in languages.values() | sort(attribute='menu_label') %} <li> {% if lang.code == current_language.code %} <span aria-current="true">{{ lang.menu_label }}</span> {% else %} <a href="{{ language_switch_urls[lang.code] }}" hreflang="{{ lang.code }}">{{ lang.menu_label }}</a> {% endif %} </li> {% endfor %} </ul> {% endif %}
language_switch_urls wijst al naar dezelfde pagina in elke taal — de vertaalde slug, of de startpagina als die vertaling nog niet bestaat —, dus een kiezer bouwt nooit zelf een URL.