Debugging and Troubleshooting
You can view the parse tree for a template as well as the generated code by
changing the template
attribute item list for the template struct:
#![allow(unused)] fn main() { #[derive(Template)] #[template(path = "hello.html", print = "all")] struct HelloTemplate<'a> { ... } }
The print
key can take one of four values:
none
(the default value)ast
(print the parse tree)code
(print the generated code)all
(print both parse tree and code)
The resulting output will be printed to stderr
during the compilation process.
The parse tree looks like this for the example template:
[Lit("", "Hello,", " "), Expr(WS(false, false), Var("name")),
Lit("", "!", "\n")]
The generated code looks like this:
#![allow(unused)] fn main() { impl < 'a > ::askama::Template for HelloTemplate< 'a > { fn render_into(&self, writer: &mut ::std::fmt::Write) -> ::askama::Result<()> { write!( writer, "Hello, {expr0}!", expr0 = &::askama::MarkupDisplay::from(&self.name), )?; Ok(()) } fn extension() -> Option<&'static str> { Some("html") } } impl < 'a > ::std::fmt::Display for HelloTemplate< 'a > { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::askama::Template::render_into(self, f).map_err(|_| ::std::fmt::Error {}) } } }