You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leaf 4.4.0中在extend块内用if条件语句报错,求解决方法

Leaf 4.4.0模板条件化export报错问题解决

问题场景

想要通过检查上下文对象字段,让staff.leaf向master.leaf的#import("body")传递条件化数据,编写的代码如下:

staff.leaf 代码

#extend("master"):

#export("title"):Staff#endexport
#export("h1"): Hello there! #endexport

#if(name):
#export("body"):#(name) is the name#endexport
#else:
#export("body"):No name!#endexport
#endif

#endextend

master.leaf 代码

<html>
    <head>
        <title>#import("title")</title>
    </head>
    <body>
        <h1>#import("h1")</h1>
        #import("body")
        #extend("footer")
    </body>
</html>

报错信息

{"reason":"unexpected token in extend body: conditional:\n  if(variable(name)):\n    raw("\n")\n    export("body"):\n      expression[variable(name)]\n      raw(" is the name")\n    raw("\n")\n  else:\n    raw("\n")\n    export("body"):\n      raw("No name!")\n    raw("\n").. use raw space and `export` only","error":true}

解答

是否支持?

Leaf 4.4.0 不支持在#extend代码块内用条件语句直接包裹#export操作,报错信息也明确指出:extend的内容里只能包含原始文本和export指令。

正确实现方式

方式1:将条件逻辑放到#export内部

把条件判断写在#export("body")的内容区域,而不是用条件语句包裹整个export:

#extend("master"):

#export("title"):Staff#endexport
#export("h1"): Hello there! #endexport

#export("body"):
#if(name):
#(name) is the name
#else:
No name!
#endif
#endexport

#endextend

方式2:先定义变量存储结果再导出

先通过条件判断生成内容存入临时变量,再将变量导出给body:

#extend("master"):

#export("title"):Staff#endexport
#export("h1"): Hello there! #endexport

#let bodyContent = if(name) { "#(name) is the name" } else { "No name!" }
#export("body"):#(bodyContent)#endexport

#endextend

内容的提问来源于stack exchange,提问作者velo35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:41:05