رندر به سبک Go html/template در Rust
go_html_template یک crate برای Rust است که جریانهای اصلی Go html/template را بازآفرینی میکند. از syntax قالب، pipelineها، escaping وابسته به context و جلوگیری از URLهای ناامن javascript: پشتیبانی میکند و در عین حال شکل API آشنا را حفظ میکند.
API قالب شبیه Go
از Template::new(...).parse(...).execute(...) همراه با امکانات define/template/range/with/pipeline استفاده کنید.
Escaping وابسته به context
escaping وابسته به context را برای متن HTML، attributeها، URL attributeها و contextهای 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
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 خود بررسی کنید.
قبلی
فهرست OSSبعدی
README / مشخصات کامل