我已经在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我尝试了您的建议(仅与我的空行不同),但仍然得到相同的结果。
答案 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
以便显示更漂亮的表格):
我希望这个技巧会有所帮助。