Skip to content

模板语法

一、变量与常量

1. 变量

顶级模板变量由模板的上下文类型定义。您可以使用点(.)来访问变量的属性或方法。 从变量中读取数据受通常的借用政策的约束。 例如,

  • {{ name }}从模板上下文中获取字段name
    rust
    use askama::Template;
    
    #[derive(Template)]
    #[template(source="Hello {{name}}", ext="txt")]
    struct HelloTemplate {
        name: String,
    }
    fn main() {
        println!("{}", HelloTemplate { name: "world".into()}.render().unwrap());
    }
  • {{ user.name }}从模板上下文中获取user字段的name字段。
    rust
    use askama::Template;
    
    struct  User {
        name: String
    }
    #[derive(Template)]
    #[template(source="Hello {{user.name}}", ext="txt")]
    struct UserTemplate {
        user: User
    }
    fn main() {
        println!("{}", UserTemplate { user: User { name: "world".into() }}.render().unwrap())
    }

2. 常量

您可以使用Rust代码中定义的常量。例如,

rust
use askama::Template;

pub const USER_NAME: &'static str = "world";

#[derive(Template)]
#[template(source="Hello {{crate::USER_NAME}}", ext="txt")]
struct HelloTemplate {}
fn main() {
    println!("{}", HelloTemplate {}.render().unwrap());
}

3. 模板内声明变量(Assignments)

在代码块内,您还可以声明变量或为变量赋值。( 其他模板无法导入 )。

rust
{% let name = user.name %}
{% let len = name.len() %}

{% let val -%}
{% if len == 0 -%}
  {% let val = "foo" -%}
{% else -%}
  {% let val = name -%}
{% endif -%}
{{ val }}

二、过滤器(filters)

从变量获得的值可以使用过滤器进行处理。过滤器使用管道符号(|),并且可以在括号中包含可选的额外参数。 过滤器可以链接起来,在这种情况下,一个过滤器的输出将传递到下一个过滤器。

例如,{{ "{:?}"|format(name|escape) }}将从访问name字段获得的值中转义为HTML字符,并将结果字符串打印为Rust文字。

内置过滤器请参考 过滤器

要定义您自己的过滤器,只需filters在派生Template impl.请注意,如果发生名称冲突,内置过滤器优先

三、空白控制

1. -控制符

Askama认为所有制表符空格换行符回车符都是空白。 默认情况下,它保留模板代码中的所有空白,但单个尾随换行符被抑制。 但是,可以通过在开始分隔符后直接写入减号或在结束分隔符前写入减号来抑制表达式和块分隔符前后的空格

rust
{%- let name = user.name %}
{% let len = name.len() %}
-------------1-------------------

{% if len > 0 %}            ====

=  {{      name         }}     =

{% endif %}

-------------2-------------------

{%- if len > 0 %}            ====

=  {{-      name         }}     =

{%- endif %}

-------------3-------------------

{% if len > 0 -%}            ====

=  {{      name         -}}     =

{% endif -%}

-------------4-------------------

{%- if len > 0 -%}            ====

=  {{-      name         -}}     =

{%- endif -%}

---------------------------------

执行结果:

text
-------------1-------------------

            ====

=  hello     =



-------------2-------------------            ====

=hello     =

-------------3-------------------

====

=  hello=

-------------4-------------------====

=hello=---------------------------------

2. +控制符

如果空白默认控件设置为“抑制”,并且您想要 在块的一侧保留空白的字符表达式,您需要使用+

不太懂

3. ~控制符

如果模板代码包含多个连续的空白,则可以使用~来合并它们。 如果您想禁止所有空格,除使用minimize外,您可以使用~

不太懂

四、函数

模板语法 has loaded