การเรนเดอร์สไตล์ Go html/template ใน Rust
go_html_template คือ crate Rust ที่สะท้อนเวิร์กโฟลว์หลักของ Go html/template รองรับไวยากรณ์ของเทมเพลต pipeline การ escape ตาม context และการบล็อก URL scheme ที่ไม่ปลอดภัย โดยยังคงรูปแบบ API ที่คุ้นเคย
Template API แบบ Go
ใช้ Template::new(...).parse(...).execute(...) พร้อมฟีเจอร์ define/template/range/with/pipeline
การ escape ตามบริบท
ใช้การ escape ตาม context สำหรับข้อความ HTML, แอตทริบิวต์, URL attribute และบริบท 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
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 ดังนั้นควรตรวจสอบพฤติกรรมในเทมเพลตที่ใช้จริงก่อนนำไปใช้ในโปรดักชัน
ก่อนหน้า
รายการ OSS