API-Referenz
Templates – Kurzreferenz
Seiten-HTML, Head und Snippets sind pongo2-Templates (Django-/Twig-ähnlich). Ausgaben mit {{ … }} werden automatisch HTML-escaped.
| Variable / Funktion | Beschreibung |
|---|---|
page.id, .title, .meta_title, .slug, .path, .description, .parent_id |
Aktuelle Seite (meta_title und description bereits ausgewertet) |
page.noindex, page.nofollow |
Robots-Einstellungen der Seite (bool) |
page.lang |
Wirksame Sprache der Seite (eigene, geerbte oder de) |
site.id, .title, .domain, .domains, .favicon |
Aktuelle Website (ihre Root-Seite); domain = erste eingetragene Domain, favicon = URL des Website-Icons oder leer |
route.path |
Angefragter Pfad |
route.slug / route.rest |
Unterpfad bei Catch-All-Seiten als String bzw. Liste von Segmenten |
route.query.x |
Query-Parameter ?x=… |
today |
Heutiges Datum (JJJJ-MM-TT, Serverzeit) – für Datumsvergleiche in data() |
now |
Aktueller Zeitpunkt (für |date) |
preview |
true in der Admin-Vorschau |
data("slug", "k1", v1, "k2", v2, …) |
Collection oder REST-Quelle, Parameter als Schlüssel/Wert-Paare (wie bei /data) |
item("slug", "feld", wert, …) |
Erster Eintrag mit feld == wert oder nil |
translations() / translations(eintrag) |
Veröffentlichte Sprachfassungen der Seite bzw. eines Eintrags für Sprachumschalter: Liste { lang, title, url, current }, sortiert nach Sprachcode; url relativ (eigene Website) oder absolut (andere Website mit Domain). Ohne Gruppe nur die aktuelle Seite. In der Vorschau mit Entwürfen |
language_name(code) |
Eigenname einer Sprache: de → „Deutsch“, fr → „Français“, de-at → „Deutsch (AT)“; unbekannte Codes unverändert |
nav() |
Veröffentlichte Unterseiten der Startseite der aktuellen Website |
children() / children(id) |
Veröffentlichte Unterseiten der aktuellen / einer bestimmten Seite |
lang_root() / lang_root(id) |
Startseite des Sprachbaums der aktuellen / einer bestimmten Seite: die Seite selbst oder die nächste Vorfahrin mit eigenem lang, sonst die Website-Startseite; Felder wie bei nav() (id, title, path, lang …). Menü je Sprache: children(lang_root().id) |
image(id, sizes?, class?) |
Responsives <img> mit srcset, Alt-Text und Maßen |
file(id) |
{ url, srcset, name, mime, size, width, height, alt } |
{% include "snippet-name" %} |
Snippet einbinden, optional with key=value |
{% component "name" key=wert %}…{% endcomponent %} |
Snippet als Komponente mit Inhalt; {% fill "slot" %}…{% endfill %} füllt benannte Slots, der Rest den Standard-Slot. Im Snippet: {% slot %}/{% slot "name" %}Fallback{% endslot %}, slots.name |
{% extends "layout" %} + {% block x %}…{% endblock %} |
Seite auf Basis eines Layout-Snippets (muss am Anfang stehen) |
{% verbatim %}…{% endverbatim %} |
Inhalt wird unverändert ausgegeben, {{ … }} darin nicht ausgewertet (z. B. für Vue/Handlebars). Funktioniert auch in Snippets |
not_found() |
Bricht das Rendern ab und liefert die 404-Seite mit Status 404 – die 404-Seite der Website (notfound_page_id, sonst Seite mit Slug 404 unter der Startseite, sonst eine Standardseite) |
asset_url(id) |
Versionierte URL einer CSS/JS-Datei, z. B. <script src="{{ asset_url(7) }}"> – wenn eine Datei an einer bestimmten Stelle statt über die Seitenzuordnung geladen werden soll |
|json |
Wert als JSON ausgeben |
|markdown |
Markdown zu HTML (GitHub-Flavored: Tabellen, Aufgabenlisten, Durchstreichen, Autolinks; Überschriften bekommen ids, Umlaute umgeschrieben: „Über uns“ → ueber-uns). Roh-HTML im Markdown wird aus Sicherheitsgründen nicht ausgegeben – |markdown:"html" lässt es durch (nur für eigene Texte). Als Block: {% filter markdown %}…{% endfilter %} |
Whitespace wird exakt so ausgegeben, wie er im Template steht (wie bei Twig) – Tags entfernen weder Zeilenumbrüche noch Leerzeichen.
Beispiel einer Blog-Seite mit Catch-All (/blog und /blog/<slug>), SEO-Titel {% if route.slug %}{{ item("blog", "slug", route.slug).titel }} – {% endif %}Blog:
{% include "header" %}
{% if route.slug %}
{% with post=item("blog", "slug", route.slug) %}
{% if not post %}{{ not_found() }}{% endif %}
<article>
<h1>{{ post.titel }}</h1>
{{ image(post.bild, "(min-width: 900px) 60vw, 100vw") }}
{{ post.text|markdown }}
</article>
{% endwith %}
{% else %}
{% for post in data("blog", "sort", "-datum", "limit", 10) %}
<a href="/blog/{{ post.slug }}">{{ post.titel }}</a>
{% endfor %}
{% endif %}
Der vollständige Spickzettel ist im HTML-Editor unter Template-Hilfe zu finden, ausführliche Erklärungen und Rezepte stehen im Handbuch.