✨🎊 Postal Wiki 三周年! 🎊✨
🎂 2026.09.11 — 邮路三载,百科同行

用户:Hehua/模板解析陷阱-Hid

来自Postal Wiki
Hehua留言 | 贡献2026年9月14日 (一) 04:38的版本 (测试页已全部清理,移除指向它们的链接)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

这是一条**模板解析陷阱**的记录,来自 2026-09-14 移植 `模板:Hid` 时踩到的坑,供日后写模板时避雷。

现象

在**表格单元格**里写下面这种"取参数、按关键字切换"的取值链时,模板会渲染出错误内容:

<th>{{{标题|{{{標題|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}}}}}}</th>

调用 `

` 本应显示"甲",实际渲染成:一个多余的左花括号,紧跟一个指向"模板:标题"的**红色链接**(该模板并不存在)。

已排除的可能

  • 不是 `{{#switch}}` / `{{#ifeq}}` 本身的问题(单独用都正常);
  • 不是"两层参数默认值"写法本身的问题(单独用正常);
  • 不是 `style="position:relative;"` 之类属性的问题;
  • 与参数是否为空无关(无参、匿名参、命名参都能复现)。

复现的最小结构

<table class="x {{#ifeq:{{#switch:show|{{{show|}}}|{{{1|}}}=true|#default=false}}|true||mw-collapsed}}">
<tr><th>{{{标题|{{{標題|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}}}}}}</th></tr>
</table>

把同样的 `<th>` 放到表格**外面**则正常 —— 关键差异是"表格内 + 单元格里的取值链"这个组合。

规避写法(已验证可用)

把单元格内的取值拆成"先判断有没有值,再决定怎么取",避免在空值上直接做 `#ifeq` 比较:

<th>{{#if:{{{标题|{{{標題|}}}}}}|{{{标题|{{{標題|}}}}}}|{{#if:{{{1|}}}|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}|}}}}</th>

顺带提醒

定位过程用到的临时测试页(命名为 TempTest*、T a–T h、U1–U7 等)**已全部清理完毕**(本账号的 bot 无 delete 权限,由维护者用 Nuke 删除)。

  • 放置位置:用户子页(不属于条目内容)
  • 相关:`模板:Hid` 已于本次修复(改为上述规避写法)