[−][src]Module ructe::Template_syntax
This module describes the template syntax used by ructe.
The syntax is inspired by Twirl, the Scala-based template engine in Play framework, but of course with rust types expressions instead of scala.
A template consists of three basic parts:
First a preamble of use statements, each prepended by an @ sign.
Secondly a declaration of the parameters the template takes.
And third, the template body.
@(name: &str, value: &u32)
<html>
<head><title>@name</title></head>
<body>
<p>The value of @name is @value.</p>
<body>
</html>
As seen above, string slices and integers can easily be outputed
in the template body, using @name where name is a parameter of
the template.
Actually, more complex expressions can be outputed in the same
way, as long as the resulting value implements ToHtml.
Rust types that implements Display automatically implements
ToHtml in such a way that contents are safely escaped for
html.
@use any::rust::Type;
@(name: &str, items: &[Type])
<html>
<head><title>@name</title></head>
<body>
@if items.is_empty() {
<p>There are no items.</p>
} else {
<p>There are @items.len() items.</p>
<ul>
@for item in items {
<li>@item</li>
}
</ul>
<body>
</html>
The curly brackets, { and }, is used for blocks (see Loops,
Conditionals, and Calling other templates below).
To use verbatim curly brackets in the template body, they must be
escaped as @{ and @}, the same goes for the @ sign, that
precedes expressions and special blocks; verbtim @ signs must be
escaped as @@.
Modules
| a_Value_expressions | A value expression can be as simple as |
| b_Loops | A ructe |
| c_Conditionals | Both |
| d_Calling_other_templates | The ability to call other templates for from a template makes both "tag libraries" and "base templates" possible with the same syntax. |