✨🎊 Postal Wiki 三周年! 🎊✨
🎂 2026.09.11 — 邮路三载,百科同行
用户:Hehua/模板解析陷阱-Hid
来自Postal Wiki
< 用户:Hehua
这是一条**模板解析陷阱**的记录,来自 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>
顺带提醒
下方清单里,`U3`–`U7` 因创建时连接中断**并未建成**,故不列入。 排查时创建的临时测试页需要人工删除(本账号的 bot 无 delete 权限)。本次涉及的测试页(下列为写作时仍存在者;本账号的 bot 无 delete 权限,需人工删除):
- 放置位置:用户子页(不属于条目内容)
- 相关:`模板:Hid` 已于本次修复(改为上述规避写法)
