将列表作为模板的参数传递

时间:2018-09-26 11:01:05

标签: mediawiki

我已经在MediaWiki中创建了一个模板,我希望将“自由文本”传递给它。为简单起见,请将其想象成一个表,其中第一个命名参数进入单元格1,另一个命名参数进入单元格2。

编写模板本身似乎很容易,但是当我尝试在参数中传递某些结构时,我总是陷入错误。我的第一个问题是代码块:如果我写了

{{MyTemplate|first=

    // code...

|other=

    // other code instead...

}}

然后,Wiki认为管道字符是预格式化文本块的一部分,最后,我最终没有第二个参数。 此问题已使用

 
解决,但我认为这更多的是替代方法,而不是解决方案。

现在,当我尝试传递列表时,我又遇到了麻烦:

{{MyTemplate|first=

* Item 1a
* Item 2a

|other=

* Item 1b
* Item 2b

}}

同样,我最后得到第一个项目(项目1a)被忽略(未呈现为列表项目),第二个结果确定为(项目2a,作为列表项目),然后是双管道,星号和“ Item 1b” ,然后该列表继续显示“ Item 2b”。

我显然做错了什么,但是我不知道该怎么做,也无法在文档中找到任何有用的示例。请帮助我了解如何正确传递任何文本(可能包括列表或其他markdown构造)作为模板参数。

编辑

这是我的模板的代码:

{|
!First !!Other
|-
|{{{first|}}} ||{{{other|}}}
|}

也很抱歉,但是我打错了用法:另外四个空格是上面摘录的剩余部分。我已经解决了。

@Ivanhercaz我尝试了您的建议(仅与我的空行不同),但仍然得到相同的结果。

Result

1 个答案:

答案 0 :(得分:2)

在这种情况下,我必须假设您如何创建模板,因为您没有共享结构,而是如何调用和两个参数。由于这个原因,我假设您将模板创建为:

{{{first|}}}
{{{other|}}}

关于第一个问题,您可以使用{{!}}来转义竖线字符(|)。从1.24版开始,它是一个magic word,但是在解决此问题之前,需要先创建一个带有管道的模板,然后将|替换为{{!}}。魔术字的用法相同,但是您无需创建模板。

关于第二个问题,考虑到您的结构与我在此答案顶部写的内容类似,如果我写的页面与此相同:

{{MyTemplate|first=

    * Item 1a
    * Item 2a

|other=

    * Item 1b
    * Item 2b

}}

我得到两个列表和两个代码块:列表一个带有“ Item 1a”,而第一个代码块带有* Item 2a;用“项2a”列出两个,用* Item 2b列出第二个代码块。似乎没有呈现出什么:

  

忽略第一个项目(项目1a)(不显示为列表项),第二个显示确定(项目2a,作为列表项),然后是双管道,星号和“项目1b”,然后是列表继续“项目2b”。发生这种情况是由于参数中*之前有多余的空格。

因此,我建议您共享模板的代码,以更好地检查和答复您。当然,如果您想要在每个参数中传递两个不同的列表,则可以进行如下操作:

{{Test|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

此结构解决了我提到的问题。但是,我等待您的评论确定,如有必要,请编辑我的答案。

修改

现在,借助模板的代码,我了解您的问题。为了正常工作,并且模板,表和列表没有问题,您必须考虑*|||之后需要换行。我建议您插入此换行符

{|
! Wikitext !! Rendering
|- 
|
{{{first|}}}
||
{{{other|}}}
|}

我认为这是一种简单而干净的方法来做您想做的事情。因此,如果您以这种方式使用模板:

{{Test
|first=* Item 1a
* Item 2a
|other=* Item 1b
* Item 2b
}}

或者通过其他方式:

{{Test
|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

您将拥有一个类似的表格(我添加了class=wikitable以便显示更漂亮的表格):

Template using a table and a lst

我希望这个技巧会有所帮助。