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

适配11ty:寻找支持extends、带参include、slot的HTML模板引擎

符合需求的11ty兼容模板引擎推荐

Liquid(11ty默认支持)

Liquid是11ty内置的核心模板引擎之一,完全匹配你的所有需求:

  • 继承模板:通过{% extends "layout.liquid" %}实现布局继承,用{% block content %}定义占位区块,子模板中填充对应区块内容即可复用布局。
  • 带参数引入局部模板:直接在引入时传递参数,写法简洁,比如:
    {% include "partial.liquid" title="文章标题" list=posts %}
    
    也可以用对象批量传参:{% include "partial.liquid" with { title: "文章标题", list: posts } %}。
  • 插槽/区块传内容:除了block语法,还支持{% render %}标签实现插槽传递,示例:
    {% render "card.liquid" %}
      {% slot "header" %}
        <h2>自定义卡片标题</h2>
      {% endslot %}
      {% slot "body" %}
        <p>卡片内容区域</p>
      {% endslot %}
    {% endrender %}
    
    在card.liquid中用{{ slot.header }}和{{ slot.body }}接收并渲染插槽内容。

Handlebars

Handlebars是11ty支持的模板引擎,仅需简单配置即可使用,满足你的全部要求:

  • 继承模板:通过frontmatter设置layout: "layout"绑定布局模板,布局中预留{{{body}}}或自定义区块占位符,子模板内容会自动填充到对应位置;也可手动通过{{> layout }}配合区块传递实现继承。
  • 带参数引入局部模板:引入时直接传递参数,比如:
    {{> card title="卡片标题" data=cardData }}
    
    局部模板中通过{{title}}、{{data}}直接获取参数值。
  • 插槽/区块传内容:使用{{#*inline "slotName"}}定义插槽内容,在局部模板中调用对应插槽,示例:
    {{> card }}
      {{#*inline "header"}}
        <h2>自定义标题</h2>
      {{/inline}}
      {{#*inline "body"}}
        <p>自定义内容</p>
      {{/inline}}
    {{/card}}
    
    在card.hbs中通过{{> header}}、{{> body}}渲染插槽内容。

补充:Nunjucks的正确传参与插槽用法

你提到Nunjucks的include无法传递数据,其实它支持直接向include传参,写法简洁:

{% include "partial.njk" title="测试标题" items=listItems %}

也可以用对象批量传递:

{% include "partial.njk" with { title: "测试标题", items: listItems } only %}

至于插槽功能,Nunjucks的macro支持接收内容块,示例:

{% macro card(title) %}
  <div class="card">
    <h3>{{ title }}</h3>
    {{ caller() }}
  </div>
{% endmacro %}

调用时直接嵌入内容:

{% call card("卡片标题") %}
  <p>卡片内容</p>
{% endcall %}

如果你之前没尝试过这些用法,可以再测试验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:57:41