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

Eleventy中{{ xyz }}与{% abc %}模板标签的差异是什么?

Eleventy中{{ }}与{% %}标签的本质差异

你观察到的“过滤器配合双花括号、短代码用百分号标签”只是表层用法,二者存在更核心的本质区别:

1. 核心定位不同

  • {{ }}是输出型标签:它的唯一目的是计算表达式的值,并将结果直接渲染到页面中。比如调用变量、执行过滤器链、做简单运算,本质是“求值后输出内容”。
  • {% %}是逻辑控制/操作型标签:它负责控制模板的渲染流程、执行模板级操作,本身不直接输出内容(部分指令如{% include %}会引入其他内容,但标签自身不产生输出)。比如条件判断、循环遍历、模板继承/引入、执行短代码,本质是“执行逻辑或操作”。

2. 语法能力边界不同

  • {{ }}内部只能写可求值的表达式:支持变量、过滤器链式调用、基础运算(如{{ 3 * 5 }}),但不能写控制语句(比如不能在{{ }}里写if或for)。
  • {% %}内部可以写完整的模板控制逻辑:涵盖条件分支({% if %})、循环({% for %})、模板继承({% extends %})、块定义({% block %})等复杂逻辑,还能调用自定义短代码或模板标签,逻辑复杂度远高于{{ }}。

3. 输出行为差异

  • {{ }}默认会自动转义HTML内容:比如输入{{ '<script>alert(1)</script>' }},会被转义成实体字符,避免XSS风险,需要时可通过safe过滤器取消转义。
  • {% %}本身不会在最终页面留下任何痕迹:它只是作为模板渲染的“控制指令”,执行完逻辑后就消失,不会生成任何输出内容。

示例对比

使用{{ }}的场景

欢迎回来,{{ user.name | capitalize }}!
文章发布时间:{{ post.date | date('YYYY年MM月DD日') }}

使用{% %}的场景

{% if user.isAdmin %}
  <button>管理后台</button>
{% endif %}

{% for item in navLinks %}
  <a href="{{ item.url }}">{{ item.text }}</a>
{% endfor %}

{% include 'components/header.njk' %}
{% customShortcode '参数1', '参数2' %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:19