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

Mediawiki Scribunto通过DPL调用时按斜杠分割页面失败及列表不渲染问题

问题原因

1. 拆分路径失败、返回* Foo/Bar的原因

MediaWiki解析器的执行优先级中,#invoke调用高于DPL的参数替换。你直接把#invoke写在DPL的format参数中时,#invoke会先执行,此时传入的page参数是字面量字符串%PAGE%,本身没有斜杠,拆分后得到的数组长度为1,返回结果为* %PAGE%,之后DPL才会把%PAGE%替换为实际的页面名,最终输出* Foo/Bar。你尝试修改分隔符为%2f无效,就是因为此时传入的参数根本不存在斜杠。

2. 星号未被识别为列表标记的原因

有两个触发原因:

  • 你设置的DPL行分隔符是<br />,这是HTML换行标签,不是wikitext列表语法要求的纯文本换行符\n,所有生成的*都没有处于新行的开头,不符合列表语法规则。
  • 模块返回的内容默认不会触发二次wikitext解析,列表标记会被当做普通文本输出。

解决方法

步骤1:新增中间模板封装模块调用

创建Template:SubpageBullet模板,内容如下,用来延迟模块调用的执行时机:

{{#invoke:Helpers|subpage_bullets|page={{{1|}}}}}

步骤2:调整DPL调用配置

修改DPL调用,用nowiki标记延迟模板解析,同时将行分隔符改为\n,保证每个列表项独占一行:

{{#dpl:
|ordermethod=none
|namespace= {{NAMESPACE}}
|format = ,<nowiki>{{SubpageBullet|%PAGE%}}</nowiki>,,\n
}}

步骤3:可选优化模块逻辑

如果修改上述配置后星号仍然被当做普通文本输出,给模块返回值加上preprocess调用,强制触发wikitext二次解析即可:

local p = {}

function p.subpage_bullets( frame )
    local page = frame.args.page
    local parts = mw.text.split( page, "/", true )
    local wikitext = string.rep("*", #parts) .. " " ..  parts[#parts]
    return frame:preprocess(wikitext)
end

return p

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:27:00