我正在开发一个Scribunto模块,它接受可变数量的参数来生成表。我有一个调用模块的模板,以及表中行的单独模板。但是,其中一个组件将始终位于表上下文之外,而这些表上下文似乎会转义<tr>
和<td>
个标记。
调用模板只包含{{#invoke:Module|module}}
行模板包含以下示例代码:
|-
| {{{InvokeTemplate
| {{InvokeTemplate row | data1 | data2}}
}}
}
| {{{2}}}
使用此模板的任何页面都包含
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)
我尝试在lua模块中创建表
{|
此时行模板不在表上下文中,从而使行模板不再呈现。然后我尝试在行模板中使用HTML,但标签被转换为实体。最后,我尝试使用|}
和t = mw.create.html()
将表创建标记添加到调用模板中,并将lua模块修改为{{1}},但是当行模板标记很好时,标记在lua模块被翻译了。
如何阻止MediaWiki将这些标签翻译成html实体?
答案 0 :(得分: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可以帮助解决许多模板问题。