ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> 模板继承,顾名思义就是定义一个子模板,一个基础模板,子模板内可以重写父模板内的代码块 > block标签是不支持嵌套的 ### 定义基础模板 基础模板中可以定义任意多个名称标识**不重复**的区块,例如下面定义了一个`layout.html`基础模板: ~~~html <html> <head> <title>{block name="title"}标题{/block}</title> </head> <body> {block name="menu"}菜单{/block} {block name="left"}左边分栏{/block} {block name="main"}主内容{/block} {block name="right"}右边分栏{/block} {block name="footer"}底部{/block} </body> </html> ~~~ ### 定义子模板 * 子模板中使用`{extend name="layout"}`来继承基础模板 * layout是基础模板的路径,路径的解析参考视图章节的[视图文件路径](views.md) * `extend`代码必须在子模板中的第一行才有效!!! ~~~html {extend name="base"} {block name="title"}{$title}{/block} {block name="menu"} <a href="/" >首页</a> <a href="/info/" >资讯</a> <a href="/bbs/" >论坛</a> {/block} {block name="left"}{/block} {block name="main"} {loop $arr $value} <a href="/new/{$value}">{$value}</a><br/> {/loop} {/block} {block name="right"} {if $name=='news'}<b>最新资讯:</b>{/if} {/block} {block name="footer"} <ul> <li>{parent}</li> <li>版权</li> <li>其他</li> </ul> {/block} ~~~ * 上例中,我们在子模板中使用了`extend`标签来继承了`layout`模板。 * 在子模板中,可以对基础模板中的区块进行重载定义,如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。上面的例子,我们就把left区块的内容删除了,其他的区块都进行了重载。 * 在`footer`块中,我们用`{parent}`标签来引用父级模板中的内容。 * 在子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,如果区块在基础模板中不存在,则直接忽略。 * 模板可以无限级继承,比如B继承了A,而C又继承了B,最终C中的区块会覆盖B和A中的同名区块。 * 注意不要形成A继承A,或者A继承B而B又继承A这样的死循环。 * 子模板中的区块定义顺序是随意的。