2

我正在开发一个 Scribunto 模块,该模块接受可变数量的参数来生成表格。我有一个调用模块的模板,以及一个用于表中行的单独模板。但是,其中一个组件将始终位于表上下文之外,而表上下文似乎又会转义<tr><td>标记。

调用模板只包含{{#invoke:Module|module}}

行模板包含以下示例代码:

|-
| {{{1}}}
| {{{2}}}

使用此模板的任何页面都包含它

{{InvokeTemplate
| {{InvokeTemplate row | data1 | data2}}
}}

我尝试在 lua 模块中创建表

args = frame:getParent().args
t = mw.create.html('table')
t
    :tag('tr')
        :tag('th')
            :wikitext('Header1')
        :tag('th')
            :wikitext('Header2')
    :wikitext(args[1])

return tostring(t)

此时行模板不在表上下文中,因此使行模板未呈现。然后我尝试在行模板中使用 HTML,但标签被转换为实体。{|最后,我尝试使用and将表创建标签添加到调用模板中|},并将 lua 模块修改为t = mw.create.html(),但是虽然行模板标签很好,但 lua 模块中的标签被翻译了。

如何防止 MediaWiki 将这些标签翻译成 html 实体?

4

1 回答 1

1

除了 Kasper 所说的:AFAIK 你的模块应该输出 wikitext,而不是 HTML。此外,嵌套模板调用使整个事情变得非常脆弱,可能会补偿使用 Lua 产生的任何收益。

这种带有显式参数的调用已经不那么脆弱了:

{{InvokeTemplate
|1= {{InvokeTemplate row | data1 | data2}}
}}

更好的是,通常人们完全避免嵌套模板,而只是这样做:

{{Table header}}
{{Table row | A | B }}
...
{{Table footer}}

或者,如果使用 Lua,您应该制作一个模板,将无限数量的参数传递给一个模块,该模块为整个表格生成 wikitext,包括标题。

但是从您的示例中,根本不清楚为什么需要模板等来隐藏表格语法,因此很难提出具体的解决方案。https://meta.wikimedia.org/wiki/Help:Advanced_templates可以帮助解决许多模板怪癖。

于 2015-08-24T10:27:57.327 回答