Un template non va mai a prendersi nulla. Riceve un insieme di valori pronti all’uso — FolioPress lo chiama il contesto — e stampa ciò che gli serve. Parte dell’insieme è uguale in ogni pagina; il resto dipende dal template che viene renderizzato.
Comune a tutti i template
Variabile Che cos’è
page La pagina o l’articolo visualizzato, già nella lingua corrente (vedi sotto). None nell’archivio dei tag e nella ricerca.
site_title, site_description, footer Dalle Impostazioni del sito, nella lingua corrente. footer è già renderizzato da Markdown.
navigation_menu Il menu configurato nell’amministrazione: un elenco di {title, url, slug, page_id}, ogni url pronto all’uso in questa lingua.
languages Le lingue del sito, indicizzate per codice. Ogni voce: code, name, native_name, short_code, menu_label, flag.
current_language, current_language_code, default_language_code La lingua in corso di rendering (stessa forma di una voce di languages), il suo codice e la lingua principale del sito.
language_switch_urls Indicizzato per codice lingua: l’URL di questa stessa pagina in quella lingua, slug tradotto compreso.
home_url, url_language_code La pagina iniziale nella lingua corrente (/ o /pt-pt) e il prefisso in minuscolo da mettere davanti a qualsiasi URL costruisci tu ('' per la lingua principale).
static_url, media_url Da dove vengono serviti i file di questo tema (/static/<tema>) e dove vivono le immagini caricate.
page_title, meta_description, canonical_url, hreflang_urls, social_image_url, twitter_card_type, json_ld Tutto ciò di cui ha bisogno l’<head>: un titolo di scheda sensato, URL canonico e alternativi per lingua assoluti, un’immagine Open Graph e dati strutturati — tutto precalcolato.
theme_name, theme_info, theme_settings Il nome del tema attivo, il suo theme.yml completo e il suo blocco settings.
t Il traduttore del tema stesso: {{ t('Read more') }} cerca la frase in locales/<lingua>.json (vedi sotto).
request La richiesta FastAPI, per il raro caso in cui ti serva il percorso o un parametro.
L’oggetto page
La stessa forma, che sia una pagina, un articolo o una voce di qualsiasi elenco di articoli:
Campo Note
title, slug, url Nella lingua corrente. url è completo, incluso il prefisso di lingua o il dominio proprio della lingua.
content Già convertito da Markdown in HTML — stampalo con {{ page.content | safe }}.
excerpt, meta_description Le forme brevi, nella lingua corrente.
poster_image_url URL completo dell’immagine di copertina, o None.
gallery, content_gallery Elenchi di immagini: {id, url, title, width, height, original_filename}. Usa image.url direttamente.
tags {slug, title, url} per ogni tag pubblico. I tag privati non sono mai inclusi.
is_post, is_featured, published_at, created_at, updated_at Se è un articolo, se è in evidenza, e le sue date.
id L’id nel database — comodo per ancore e chiavi di cache.
Elenchi di articoli
Template Variabile Contenuto
home.html posts (alias recent_posts), pages, is_home Gli articoli che condividono un tag con la pagina iniziale, in numero e ordine dalla sezione home di theme.yml. Una pagina iniziale senza tag non riceve articoli — assegnale un tag per riempirla.
page.html posts (alias page_posts) Gli articoli che condividono un tag con questa pagina, dalla sezione page. È così che una pagina “Blog” elenca i suoi articoli.
post.html related_posts, is_post Altri articoli che condividono un tag con questo, dalla sezione post.
tag.html tag (title, slug), posts Ogni articolo pubblicato con questo tag, dalla sezione tag.
search.html search_query, search_results, results_count Il termine cercato e le pagine e gli articoli corrispondenti.
Ogni elenco di articoli arriva con una paginazione della stessa forma: has_pagination, current_page, total_pages, has_previous, has_next, previous_page, next_page e pagination_urls con first, previous, next e last — None dove non c’è dove andare. Con has_pagination disattivato in theme.yml, l’elenco viene semplicemente tagliato a posts e gli indicatori restano falsi.
Le lingue e il selettore
Due dei campi lingua vengono calcolati per te. short_code è il solo codice della lingua — EN — a meno che il sito abbia attiva anche un’altra variante della stessa lingua, nel qual caso mantiene la regione: EN-US ed EN-GB. menu_label segue la stessa regola con i nomi: English, oppure English (US) ed English (UK). È esattamente la regola usata dal selettore della lingua dell’amministrazione, così il sito e l’amministrazione non sono mai in disaccordo su un’etichetta. Un selettore completo è quindi breve:
{% 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 punta già alla stessa pagina in ogni lingua — lo slug tradotto, o la pagina iniziale se quella traduzione non esiste ancora —, quindi un selettore non costruisce mai un URL da solo.