模板的参数命名请参见:设定参数

模板参数,即“parameter”,或者叫“args”,是模板在调用时所传递进模板中的变量,是模板工作和运行的重要元素。

默认参数

默认参数即模板没有赋值参数时的默认显示情况,一个模板可能包含若干个参数,如果参数缺省,可能会造成显示不当

这是一个对比实例

模板 模板内代码 显示内容
{{articles}} 本期推荐内容:{{{1}}},{{{2}}} 本期推荐内容:{{{1}}},{{{2}}}
{{articles2}} 本期推荐内容:{{{1|安度因·洛萨}}},{{{2|莱恩·乌瑞恩}}} 本期推荐内容:安度因·洛萨,莱恩·乌瑞恩
{{articles3}} 本期推荐内容:{{{1|}}},{{{2|}}} 本期推荐内容:,

当参数为空时: 在一个模板中,如果a有赋值(包括赋空值),则{{{a|b}}}等于{{{a}}},否则等于b。这样避免了因{{{a}}}没有赋值而出现的问题。

这样{{{a}}}和b可以是最终结果,也可以作为参数名,参数值,模板名,它们的一部分,等等。

注意

  • 若有多个默认部分,仅首个有效,比如{{{a|b|c|d}}}等价于{{{a|b}}}。
  • 默认值不能包含表格的“|”。
  • 参数名的表达式可以包含“|”,如果表达式是一个模板或参数。

比如:使用Template:x3,包含{{{1}}}{{{1}}}{{{1}}};Template:t2,包含初-{{{1}}}-中-{{{2}}}-末

  • {{{a|b|c|d}}}得到b ——参数“c”和“d”无效,“a”未赋值,所以为“b”
  • {{{a|{{x3|b}}}}}得到bbb ——参数“a”未赋值,所以是{{x3|b}}即bbb
  • {{{a|{{{b|c}}}}}}得到c ——内层参数“b”未赋值,所以传出“c”,外层参数“a”未赋值,由此得到“c”
  • {{{a|[[b|c]]}}}得到c——“a”未赋值所以得到表达式[[b|c]]
  • {{{{{x3|a}}|b}}}得到b——参数“aaa”未赋值所以得到默认参数“b”
  • {{{{{{a|b}}}|c}}}得到c——参数“a”未赋值所以得到“b”,参数“b”也未赋值因此最终结果是“c”
  • {{{a|<nowiki>b|c</nowiki>}}}得到b|c
    {{t2|{{{a|<nowiki>b|c</nowiki>}}}}}得到初-b|c-中-{{{2}}}-末

服务器效率

默认参数对服务器来说比多层模板嵌套效率更高。

参数嵌套

参数兼容

根据上述规则,我们可以利用参数的默认机制,在参数中嵌套参数,达到兼容多种参数名的目的,例如:

  • {{{姓名|{{{name|未输入姓名!}}}}}},有{{{姓名}}}时显示{{{姓名}}},没有{{{姓名}}}显示{{{name}}}{{{name}}}也没有时就返回提示文字“未输入姓名!”,这样的模板无论是输入“name”还是“姓名都会被同样处理,有着更高的容错。

重复调用模板参数

重复调用模板参数的情况经常出现,mediawiki会对此进行自动侦测并通过添加“重复调用模板参数”分类来进行提示。一般来说,造成这种情况的原因是在一个模板内对同一个参数进行了超过一次的赋值

  • 如果一个参数被多次赋值,那么只有最后一次生效

如何排查

  • 这种情况最常发生在infobox系列模板中,最常见的情况是data的序号重复,如果出现两个data3=“”就会造成重复赋值;
  • 除此之外,还容易发生在infobox的说明文档中,如果您在模板说明中因为举例子而再次书写了一个参数赋值却没有正确使用<noinclude>标签,那么也会造成此种情况

参数的作用范围

参数的生效范围是本模板之内,这就意味着

  1. 永远无法在本模板之外调用本模板内的参数。
  2. 一个模板无法调用本页面其他模板内的参数。

跨模板传递参数的解决方案

同一页面不同模板之间传递参数可以使用的方法:

  1. {{#var:}}参数,详情参见:var系列函数
  2. 通过数组函数{{#array:}}传递,参见:Array系列函数

跨页面传递参数的解决方案

不同页面之间模板传递参数必须借助SMW来转储、读取,详情参见:SMW系列函数

avatar