调试与故障排查
你可以通过修改模板结构体上 template 属性的参数列表,来查看模板的解析树以及生成的代码:
#![allow(unused)]
fn main() {
#[derive(Template)]
#[template(path = "hello.html", print = "all")]
struct HelloTemplate<'a> { ... }
}
print 键可以取以下四个值之一:
none(默认值)ast(打印解析树)code(print the generated code)all(同时打印解析树和代码)
在编译过程中,生成的输出将打印到 stderr。
对于示例模板,解析树如下所示:
#![allow(unused)]
fn main() {
[Lit("", "Hello,", " "), Expr(WS(false, false), Var("name")), Lit("", "!", "\n")]
}
生成的代码如下所示:
#![allow(unused)]
fn main() {
impl<'a> askama::Template for HelloWorld<'a> {
fn render_into<AskamaW>(&self, __askama_writer: &mut AskamaW) -> askama::Result<()>
where
AskamaW: core::fmt::Write + ?Sized,
{
__askama_writer.write_str("Hello, ")?;
match (
&((&&askama::filters::AutoEscaper::new(
&(self.name),
askama::filters::Html,
))
.askama_auto_escape()?),
) {
(expr2,) => {
(&&askama::filters::Writable(expr2)).askama_write(__askama_writer)?;
}
}
__askama_writer.write_str("!")?;
Ok(())
}
const SIZE_HINT: usize = 11usize;
}
}