Go html/template-ის სტილის რენდერინგი Rust-ში

go_html_template არის Rust crate, რომელიც Go html/template-ის მთავარ სამუშაო ნაკადებს იმეორებს. ის მხარს უჭერს template სინტაქსს, pipelines-ს, კონტექსტის მიხედვით escaping-ს და არასაიმედო URL scheme-ების დაბლოკვას, ნაცნობ API ფორმასთან ერთად.

Go-ს მსგავსი Template API

გამოიყენეთ Template::new(...).parse(...).execute(...) define/template/range/with/pipeline ფუნქციებით.

კონტექსტის მიხედვით escaping

HTML ტექსტისთვის, ატრიბუტებისთვის, URL ატრიბუტებისთვის და script/style კონტექსტებისთვის იყენებს კონტექსტის მიხედვით escaping-ს და ბლოკავს არასაიმედო javascript: URL-ებს.

web-rust რეჟიმი

web-rust ფიჩერით parse_files/parse_glob/parse_fs გამორთულია, რათა template-ების ჩატვირთვა მხოლოდ მეხსიერებაში მოხდეს.

დაყენება და ძირითადი გამოყენება

დაამატეთ crate, შემდეგ გადაამოწმეთ parse + execute_to_string-ის მინიმალური ნაკადი. web-rust გარემოში გამოიყენეთ მეხსიერებაში არსებული template string-ები ფაილებიდან ჩატვირთვის 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 ამჟამად ძირითად სამუშაო ნაკადებს ახორციელებს და თავსებადობის ხარვეზებს ეტაპობრივად ავსებს ძირითად სამუშაო ნაკადებს ახორციელებს და თავსებადობის ხარვეზებს ეტაპობრივად ავსებს. ის ჯერ კიდევ არ არის Go html/template-თან მკაცრი 1:1 თავსებადობის სამიზნე, ამიტომ ქცევა production template-ებში გადაამოწმეთ.