Kết xuất kiểu Go html/template trong Rust.

go_html_template là một crate Rust phản chiếu các luồng làm việc chính của Go html/template. Nó hỗ trợ cú pháp template, pipeline, escape theo ngữ cảnh và chặn scheme URL không an toàn trong khi vẫn giữ hình dạng API quen thuộc.

API Template kiểu Go

Dùng Template::new(...).parse(...).execute(...) với các tính năng define/template/range/with/pipeline.

Escape theo ngữ cảnh

Áp dụng escape theo ngữ cảnh cho văn bản HTML, thuộc tính, thuộc tính URL và ngữ cảnh script/style, đồng thời chặn URL javascript: không an toàn.

Chế độ web-rust

Khi bật tính năng web-rust, parse_files/parse_glob/parse_fs bị vô hiệu hóa để buộc nạp template trong bộ nhớ.

Thiết lập và cách dùng cơ bản

Thêm crate, sau đó kiểm tra luồng parse + execute_to_string tối thiểu. Trong môi trường web-rust, hãy dùng chuỗi template trong bộ nhớ thay vì API nạp từ file.

Cài đặt

cargo add go_html_template

Ví dụ 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(())
}
Trạng thái tương thích

go_html_template hiện tại triển khai các luồng cốt lõi đồng thời tiếp tục thu hẹp khoảng cách tương thích . Nó vẫn chưa phải mục tiêu tương thích 1:1 nghiêm ngặt với Go html/template, vì vậy hãy kiểm tra hành vi trong template sản xuất của bạn.