Go html/template -tyylinen renderöinti Rustissa

go_html_template on Rust-crate, joka jäljittelee tärkeimpiä Go html/template -työnkulkuja. Se tukee template-syntaksia, pipelineja, kontekstitietoista escapingia ja turvattomien javascript:-URL-osoitteiden estoa säilyttäen tutun API-muodon.

Go-tyylinen Template API

Käytä Template::new(...).parse(...).execute(...) yhdessä define/template/range/with/pipeline-ominaisuuksien kanssa.

Kontekstitietoinen escaping

Soveltaa kontekstitietoista escapingia HTML-tekstiin, attribuutteihin, URL-attribuutteihin sekä script/style-konteksteihin ja estää turvattomat javascript:-URL:t.

web-rust-tila

web-rust-ominaisuuden kanssa parse_files/parse_glob/parse_fs poistuvat käytöstä, jotta templatejen lataus voidaan pakottaa tapahtumaan muistista.

Asennus ja peruskäyttö

Lisää crate ja varmista sitten minimaalinen parse + execute_to_string -työnkulku. web-rust-ympäristöissä käytä muistissa olevia template-merkkijonoja tiedostolataavien API:en sijaan.

Asenna

cargo add go_html_template

Rust-esimerkki

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(())
}
Yhteensopivuuden tila

go_html_template toteuttaa ydin-työnkulut ja kaventaa samalla yhteensopivuusaukkoja . Se ei vielä tavoittele tarkkaa 1:1-yhteensopivuutta Go html/template -paketin kanssa, joten tarkista toiminta omissa tuotantotemplateissasi.