Skip to content

命令

命令

在 Allay 模板中,使用 {- -} 表示命令块,使用 {: :} 表示表达式块。所有表达式块都会被求值并替换为其结果。

Allay 模板支持多种命令,用于控制模板渲染流程。

set

set 指令用于在当前作用域创建变量。

{- set $var .something -}
{: $var :} <!-- 使用变量 -->

set 指令将当前作用域变量(即 this)的 something 字段赋值给变量 $var,之后可以在模板中使用该变量。

get

get 指令用于返回当前作用域中的变量。但通常可以省略,因为变量会自动解析。

{: get $var :}
{: $var :} <!-- 等价于上面 -->

for

for 指令用于遍历列表。如果变量不是列表或不存在,则会抛出错误。

<ul>
    {- for $player: .players -}
    <!-- 为 .players 中的每个项创建变量 $player -->
    <li>
    {: $player.name :}
    </li>
    {- end -}
</ul>

也可以通过提供第二个变量访问当前项的索引:

<ul>
    {- for $player, $index: .players -}
    <!-- 支持索引,从 0 开始 -->
    <li>
    {: $index + 1 :}: {: $player.name :}
    </li>
    {- end -}
</ul>

with

with 指令用于通过对象进入子作用域。如果对象不存在,则会跳过。

{- with .author -}
<p>{: .name :}</p>
{- end -}

ifelse

if 指令用于条件渲染内容。如果条件不为 null 且为 true,则渲染内容,否则跳过。可以使用 else 提供备选内容。

{- if .is_admin -}
<p>Admin</p>
{- else -}
<p>User</p>
{- end -}

end

end 指令用于结束命令块,如 forwithif

param

param 指令用于访问传递给模板或include指令的参数。参数从0开始索引。

<div class="say">{: param.0 :}</div>
<div class="author">{: param.1 :}</div>

include

include 指令用于包含其他模板文件。

  • 第一个参数是文件路径
  • 第二个参数是要传递给包含模板的作用域(如果未提供,则使用当前作用域)
  • 其他参数可传递给包含模板,并通过 param 访问
{- include "header.html" -}
<!-- 使用当前作用域 -->
{- include "article/post.html" .post "My Post" -}
<!-- 传递 .post 作为作用域,"My Post" 作为参数 0 -->