Go html/template-stílusú renderelés Rustban

A go_html_template egy Rust crate, amely a fontosabb Go html/template munkafolyamatokat tükrözi. Támogatja a templateszintaxist, a pipeline-okat, a kontextusfüggő escapinget és a nem biztonságos javascript: URL-ek blokkolását, miközben ismerős API-formát tart meg.

Go-szerű Template API

Használhatja a Template::new(...).parse(...).execute(...) hívásokat define/template/range/with/pipeline funkciókkal.

Kontextusfüggő escaping

Kontextusfüggő escapinget alkalmaz HTML szöveghez, attribútumokhoz, URL-attribútumokhoz és script/style környezetekhez, valamint blokkolja a nem biztonságos javascript: URL-eket.

web-rust mód

A web-rust feature bekapcsolásával a parse_files/parse_glob/parse_fs letiltásra kerül, így kikényszeríthető a memóriabeli template-betöltés.

Beállítás és alapvető használat

Adja hozzá a crate-et, majd ellenőrizze a minimális parse + execute_to_string folyamatot. web-rust környezetben a fájlbetöltő API-k helyett memóriabeli template stringeket használjon.

Telepítés

cargo add go_html_template

Rust példa

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(())
}
Kompatibilitási állapot

A go_html_template jelenleg az alapvető munkafolyamatokat megvalósítja, miközben tovább zárja a kompatibilitási réseket . Még nem szigorú 1:1 kompatibilitási cél a Go html/template-tel, ezért éles template-eknél ellenőrizze a viselkedést.