Rendering in stile Go html/template in Rust.

go_html_template è una crate Rust che replica i principali flussi di lavoro di Go per la gestione dei template HTML. Supporta la sintassi dei template, le pipeline, l'escaping in base al contesto e il blocco di schemi URL non sicuri, mantenendo un'interfaccia API familiare.

API dei template in stile Go

Utilizza Template::new(...).parse(...).execute(...) sfruttando le funzionalità di define, template, range, with e pipeline.

Escaping sensibile al contesto

Applica un escaping sensibile al contesto per testo HTML, attributi, attributi URL e contesti di script/stile, e blocca gli URL javascript: non sicuri.

Modalità web-rust

Con la funzionalità web-rust, le funzioni parse_files, parse_glob e parse_fs sono disabilitate per forzare il caricamento in memoria dei template.

Configurazione e utilizzo di base

Aggiungi la crate, quindi verifica un flusso minimo di parse ed esecuzione con conversione in stringa. Negli ambienti web-rust, utilizza stringhe di template in memoria anziché le API di caricamento file.

Installazione

cargo add go_html_template

Esempio Rust

src/main.rs
use go_html_template::{Template, Value};

fn main() -> Result<(), Box<dyn std::error::Error>> {
  let tpl = Template::new("page")
    .parse(r#"<h1>{{.Title}}</h1>\n<p>{{.Body | safe_html}}</p>"#)?;

  let out = tpl.execute_to_string(&serde_json::json!({
    "Title": "go_html_template",
    "Body": "<em>trusted</em>"
  }))?;

  println!("{out}");
  Ok(())
}
Stato di compatibilità

go_html_template attualmente implementa i flussi di lavoro fondamentali mentre continua a colmare le lacune di compatibilità . Non offre ancora una compatibilità 1:1 perfetta con html/template di Go, quindi verifica attentamente il comportamento nei tuoi template di produzione.