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

Pandoc模板中循环内非循环变量未获取循环数组值问题

解决Pandoc模板中循环内非循环变量无法引用循环变量值的问题

问题根源

你碰到的这个情况,本质是Pandoc模板的变量作用域限制:mais是定义在YAML顶层的非循环变量,它的内容在模板开始渲染时就被固定下来了,不会随着$for(icones)$的每一次迭代,重新解析里面的$icones.nome$引用。所以mais.url里的$icones.nome$只是当作普通文本处理,自然没法获取循环里的动态值,导致最终URL为空。

两种可行的解决方案

方案1:直接在模板中拼接URL(最简单)

既然mais.url的结构是固定的,只是需要插入icones.nome和gnome的值,不如直接跳过mais变量,在循环内部直接拼出完整URL:

修改你的Pandoc模板为:

$for(icones)$
<img alt="$icones.nome$" name="$icones.nome$" src="https://filename.com/$icones.nome$/logo=$gnome$"/>
$endfor$

这样每一次循环迭代时,$icones.nome$和$gnome$都会被正确替换成当前循环的对应值,完全符合你的期望输出。

方案2:整合YAML结构+使用Pandoc的replace过滤器(适合需要统一管理URL模板的场景)

如果后续需要统一修改URL结构,不想每次改模板,可以调整YAML,把URL模板放到icones的每个对象里,再用Pandoc的replace功能动态替换变量:

修改后的YAML配置:

---
gnome: 'gnome'
icones:
- {nome: actions, url_template: 'filename.com/$nome$/logo=$gnome$'}
- {nome: apps, url_template: 'filename.com/$nome$/logo=$gnome$'}
- {nome: devices, url_template: 'filename.com/$nome$/logo=$gnome$'}
- {nome: mimetypes, url_template: 'filename.com/$nome$/logo=$gnome$'}
- {nome: places, url_template: 'filename.com/$nome$/logo=$gnome$'}
- {nome: status, url_template: 'filename.com/$nome$/logo=$gnome$'}
---

修改后的Pandoc模板(需要Pandoc 2.18及以上版本):

$for(icones)$
$let:url = icones.url_template$
$url := replace(url, "$nome$", icones.nome)$
$url := replace(url, "$gnome$", gnome)$
<img alt="$icones.nome$" name="$icones.nome$" src="https://$url$"/>
$endfor$

这种方式把URL模板集中在YAML里,后续要改结构只需要修改YAML中的url_template即可,不用动模板代码。

最终效果验证

不管用哪种方案,最终生成的HTML都会是你想要的样子:

<img alt="actions" name="actions" src="https://filename.com/actions/logo=gnome"/>
<img alt="apps" name="apps" src="https://filename.com/apps/logo=gnome"/>
<img alt="devices" name="devices" src="https://filename.com/devices/logo=gnome"/>
<!-- 其余项以此类推 -->

内容的提问来源于stack exchange,提问作者Oo'-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:52:26