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

go_html_template — это Rust crate, который повторяет основные рабочие сценарии 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

С feature 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, поэтому проверьте поведение в производственных шаблонах.