L'operatore render
usato tra {{
e }}
:
{{ render percorso }}
renderizza il file con il percorso indicato e ne mostra il contenuto. Un file renderizzato con render
viene chiamato "partial" proprio perché contiene solo una parte di una pagina. In genere, per convenzione, i file partial stanno tutti in una cartella del template chiamata "partials":
{{ render "/partials/promotion.html" }}
Il percorso del file partial può essere anche relativo al file in cui si trova render
:
{{ render "../header.html" }}
Quando un file partial viene renderizzato, il codice del file non vede le variabili dichiarate nel file in cui si trova render
come non vede tutte le eventuali altre dichiarazioni in questo file. A questo scopo si usano invece le macro con parametri, come ad esempio:
{{ Image("picture.jpg", 400, 500) }}
Per i dettagli si vedano le macro.
Render è un operatore di Scriggo e come tale può essere usato nelle espressioni, non solo tra {{
e }}
, come qualsiasi altro operatore. La sua valutazione ritorna una stringa. Ad esempio è possibile assegnare la sua valutazione ad una variabile per una successiva elaborazione:
{% var email = render "email.html" %}
ed usarlo come parte di un'altra espressione:
{%%
if discount {
show "Offer: " + render "offer.html"
}
%%}
Se il file da renderizzare non esiste, si verifica un errore di compilazione e il file del template non viene eseguito o il template non viene applicato al sito. Se invece si vuole gestire il caso in cui il file non esiste, senza che si verifichi un errore, si può usare una forma speciale di assegnamento con l'operatore render:
{% var promo, ok = render "extra.html" %}
In questo esempio, se il file "extra.html" esiste, la variabile promo
conterrà il suo contenuto renderizzato e la variable ok
sarà true
. Se il file "extra.html" non esiste, la variabile promo
sarà una stringa vuota e la variabile ok
sarà false
.
Pertanto se si desidera renderizzare e mostrare un file partial solo se esiste, senza che si verifichi un errore se non esiste, si può scrivere:
{% if promo, ok := render "extra.html"; ok %}{{ promo }}{% end if %}