Рендеринг у стилі Go html/template на Rust.

go_html_template — це crate для Rust, який відтворює основні робочі сценарії Go html/template. Він підтримує синтаксис шаблонів, pipeline, екранування з урахуванням контексту та блокування небезпечних схем URL, зберігаючи знайому форму API.

API шаблонів у стилі Go

Використовуйте Template::new(...).parse(...).execute(...) з можливостями define/template/range/with/pipeline.

Екранування з урахуванням контексту

Застосовує контекстно-залежне екранування для HTML-тексту, атрибутів, URL-атрибутів і контекстів script/style та блокує небезпечні URL на кшталт javascript:.

Режим web-rust

З функцією web-rust parse_files/parse_glob/parse_fs вимкнено, щоб можна було примусово використовувати лише шаблони в пам'яті.

Налаштування та базове використання

Додайте crate, а потім перевірте мінімальний сценарій parse + execute_to_string. У середовищах web-rust використовуйте рядки шаблонів у пам'яті замість API завантаження з файлів.

Встановлення

cargo add go_html_template

Приклад 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(())
}
Стан сумісності

Зараз go_html_template реалізує базові робочі сценарії й поступово закриває прогалини сумісності . Це ще не сувора мета сумісності 1:1 з Go html/template, тому перевіряйте поведінку у своїх production-шаблонах.