Help:模板
| 当前條目或章節需要更新。 |
模板在维基系统(MediaWiki)中是一个可以加入其他页面的页面,就好像计算机语言中的子程序。
创建模板时,最好解释模板的作用和相关参数,给出例子,调用模板的形式以及结果。
本文提供维基百科模板的使用手册和指南,另外可以参考,
- 模板简介:Help:模板入门
- 模板分类:Category:維基百科模板
- 模板名字空间的帮助信息:Wikipedia:Template名字空间
- 模板索引:Template名字空间页面列表
- 模板扩展语法:Help:解析器函数
目录 |
概述[编辑]
任何模板均以Template:开头,但调用时必须使用{{模板名}}的形式。如Template:tc是一个模板,内容为“in”。如果把{{tc}}加入这个页面,则{{tc}}的内容会显示,即in。
模板命名[编辑]
模板名字空间是以“Template:”开头的名字空间,这个前缀是跨语言的。
在此名字空间的页面叫做模板,此页面的内容是用来通过嵌入技术加入到其他页面中,从而创建复杂的文档。
将名为“Template:模板名”的模板加入页面中的语法是{{模板名}},这个叫做模板标签。例如:“一二{{三到六}}七八”中使用了内容为“三四五六”的模板Template:三到六,结果就是“一二三四五六七八”。
如果“Template:模板名”不存在,{{模板名}}的作用就与[[Template:模板名]]相同,提供一个连接到不存在页面的链接:Template:模板名。所以,一种创建模板的方法就是先放一个模板标签在页面里,然后点击它开始编辑模板。
如果一个页面不是以“Template:”开头,则不属于模板,但也可以使用模板标签,例如{{Help:模板入门}}会将Help:模板入门中的内容加入到该页来。这样一来,所有页面都可以当作是模板。但是,使用在模板名字空间的页面(即真正的模板)有以下独特的好处:
- 所有被页面使用的模板都在页面编辑页显示出来。
- 当模板改变时,所有使用模板页面的服务器缓存(相对于浏览器缓存)自动被清空;而位于其他名字空间的页面,服务器缓存往往要手工清空。
而模板名字空间以外的页面一般在如下情况下作为模板使用:
- 引用维基百科名字空间的界面消息。
- 将一個长页面(可以屬于主条目名字空间,假設名字就叫做“长页面”,例子)拆分为较短页面时,可以将短页面命名为“长页面/第一部分”、“长页面/第二部分”等,然后使用
{{/第一部分}}<br/>{{/第二部分}}来拼成长页面。Wikipedia:模板消息/全部就是一个好例子。
一个模板可以调用另一个模板,它也可以调用它自己,但自我调用只有一层有效。例如:Template:模板1的内容是“一次,{{模板1}}”,在Template:模板1中将显示:“一次,一次,{{模板1}}”,如果其他条目调用该模板,所加入的文字将是
一次,检查到模板循环:Template:模板1
在2010年前,如果把其他模板重定向至某模板,该模板又引用重定向,且多次自我调用均为不同重定向,则该模板可以实现多次自我调用。MediaWiki后来取消此功能。如{{RR|7}}的结果为RR-检查到模板循环:Template:RR7。
模板中变量在模板被加入某页面后才被赋值,而不是之前。因此,如果一个模板中含有{{PAGENAME}},该模板被某页面调用,相应的位置显示的将是调用页面的名称,而不是被调用模板的名称。
一个页面所调用的所有模板都在该页编辑页面中列出,并提供相应的链接,而且:
- 一个段落的编辑页面不会列出任何模板;
- 编辑旧版本的页面,这个列表仍然是当前最新的;
- 可加入模板擴展語法#if, #ifeq, #ifexist, #ifexpr, 或 #switch;
- 如果不真正提交编辑,仅仅在预览中使用的模板不被列出。
- 如果模板名里面嵌套另一个模板,如{{{{tc}}{{CURRENTDAY}}}},则会得到Template:In18;编辑页面里会显示Template:in18。
- 模板名#后的内容会忽略。
请注意,如果页面结尾没有换行,编辑页面中总是在结尾添加一个换行,但这并不影响模板的某些效果,即这个换行不真正起作用。例如:
{{编号演示}}{{编号演示}}
{{编号演示}}
的结果是:
- 北京
- 上海
- 北京
- 上海
- 北京
- 上海
参数[编辑]
参数调用格式[编辑]
在模板页面中,用三个大括号可以调用参数,例如:{{{参数1|参数1的默认值}}}可以调用参数1,如果在模板调用中参数1没有赋值,则使用参数1的默认值作为参数1的赋值。在调用带参数的模板的时候,语法是:
- 如果在模板页面中参数使用是名称形式,即诸如
{{{参数1}}}...{{{参数2}}}...,则调用是使用{{甲模板|参数1=参数1的赋值|参数2=参数2的赋值}}; - 如果在模板页面中参数使用是编号形式,即诸如
{{{1}}}...{{{2}}}...,则调用是使用{{甲模板|参数1的赋值|参数2的赋值}}。
注意:参数默认值和参数赋空值是不同的。
例1:含有命名参数的模板[编辑]
我们可以创建一个名为Template:姓名的模板,内容为:
我是{{{姓}}}{{{名}}}。
如果用{{姓名}}调用这个模板,我们会得到:
- 我是{{{姓}}}{{{名}}}。
如果用{{姓名|姓=张|名=飞}},我们则得到:
- 我是张飞。
例2:含有编号参数的模板[编辑]
再来一个例子,说明一个编号参数的定义和调用:我们还是先要定义一个带参数的模板,例如模板Template:数数的内容是
一二三{{{1|四五六}}}七八九
赋值调用{{数数|六五四}}的结果是:
- 一二三六五四七八九
赋空值调用{{数数|}}的结果是:
- 一二三七八九
未赋值调用,就会调用默认值,{{数数}}的结果是:
- 一二三四五六七八九
参数值的限制[编辑]
- 如果参数值中含有等号(
=),调用模板时则必须使用参数名,即使参数名只是一个编号也要使用。 - 如果参数值中含有两个连续的右大括号(
}}),调用参数时必须将其放入nowiki标记中,例如<nowiki>}}</nowiki>。 - 如果参数值中含有竖线(
|),调用参数时必须将其放入nowiki标记中,例如<nowiki>|</nowiki>,或用{{!}}代替。 - 参数值中可以包含一对双方括号,用于链接一个条目,或是其他名字空間的頁面,但不能含有半个右双方括号,然后再接半个左双方括号。例如Template:数数1中的内容是:
[[一二{{{1}}}六七]]
- 调用
{{数数1|三]]四[[五}}的结果是: - {{数数1|三]]四[[五}}
参数的取值考虑[编辑]
编号参数的优点[编辑]
- 调用模板时不需要参数名和等号,从而节约打字时间和存储空间。
- 阿拉伯数字是世界性的,在翻译的时候省事,也可以被不懂中文的人理解。
命名参数的优点[编辑]
- 参数的顺序可以变化,模板的参数可以任意添加和修改,而不会对调用模板的页面产生致命影响。
- 参数的意义容易理解。
- 当模板具有大量缺省参数时,命名参数使语法更为清晰
- 一些特殊的技巧利用这样一个特性:在一次模板调用中允许对同一个参数多次赋值,这导致最后一次赋值的内容生效;这种做法隐式保证了在本次模板调用中该参数至少被赋值一次
例3:混合使用命名参数和编号参数[编辑]
命名参数和编号参数可以混合使用,此时的未命名参数根据位置被编号,命名参数不被编号。
模板Template:又数数的内容是
{{{1}}}、{{{2}}}、{{{3}}}
{{又数数|3=1|2|1=3|4|5|6|7}}的结果是
- 3、4、5
因为编号参数有顺序规则,所以3不能提前调用,会被忽略。
而模板里只有3个参数,所以从第一个接受的参数开始,只接受一共3个参数,之后的因为不存在,所以忽略。
注意:请尽量避免混合使用命名参数和编号参数,以避免混乱。
未赋值且没有默认值的参数[编辑]
例如:模板Template:再数数的内容是
一-{{{1}}}-三-{{{2}}}-五
调用{{再数数||}}的结果是
- 一--三--五
调用{{再数数|二|}}的结果是
- 一-二-三--五
调用{{再数数||二}}的结果是
- 一--三-二-五
调用{{再数数|二|{{{1}}}}}的结果是
- 一-二-三{{1}}五
调用{{再数数|{{{1}}}|四}}的结果是
- 一{{1}}三-四-五
调用{{再数数|{{{1}}}|{{{2}}}}}的结果是
- 一{{1}}三{{2}}五
例4:参数赋值中包含参数[编辑]
如果一个参数未赋值,则在三个大括号中的参数名在模板调用时不起参数的作用。如果要它其作用,一定要赋值。
- 模板Template:数数A的内容是
{{再数数|二}}
- 调用
{{数数A|四}}的结果是:- 一-二-三{{2}}五
- 模板Template:数数B的内容是
{{再数数|二|{{{1}}}}}
- 调用
{{数数B|四}}的结果是:- 一-二-三-四-五
- 模板Template:数数C的内容是
{{再数数|二|2={{{1}}}}}
- 调用
{{数数C|四}}的结果是:- 一-二-三-四-五
例5:参数迭代[编辑]
最简单的参数迭代办法就是在模板中用同样的参数名。
模板Template:姓名国籍中使用
{{姓名|姓={{{姓}}}|名={{{名}}}}}{{{国籍}}}人。
进一步[编辑]
像{{再数数||四}}这样的调用将空值赋给参数1,而不是没有赋值,所以结果是
- 一--三-四-五
如果我们希望参数1不赋值,则应该将参数2用命名参数形式赋值,如
{{再数数|2=四}}
结果则是
- 一{{1}}三-四-五
如果这样的参数值被赋给如<font size>这样的标记,会使编码错误,但这些错误会被系统(MediaWiki)忽略,而不产生奇怪的结果。请参看英文的例子:字体大小。
参数“02”和参数“2”是不同的,例如模板Template:例5的内容是
{{{1}}}{{{2}}}{{{02}}}
调用{{例5|3|4|5|6}}的结果是
- 34{{{02}}}
注意:维基系统名字空间的参数名是不同的,它们是$1, $2, ...,参见Help:名字空间、Special:所有消息和MediaWiki:Blockedtext。
参数及模板命名[编辑]
参数命名可以调用其他参数,如Template:XYZ内容为{{{{{{XYZ}}}}}},则调用{{XYZ|XYZ=SDF|SDF=789}}会把参数XYZ的值SDF作为参数名,显示参数SDF的值,即789。MediaWiki会把{{{{{{XYZ}}}}}}解析为{{{ {{{XYZ}}} }}}而不是{{ {{ {{XYZ}} }} }}(结果是{{ {{ {{{{{{XYZ}}}}}} }} }})。这里空格是敏感的。另外,调用其他参数仅可调用1层。如Template:XYZ2内容为{{{{{{{{{XYZ}}}}}}}}},则{{XYZ2|XYZ=SDF|SDF=ABC|ABC=789}}结果为789。
又如,Template:1a2b内容为{{{第一个|第一个未定}}}-{{{第二个|第二个未定}}},Template:nanb内容为{{1a2b|{{{1|第一个}}}={{{1|第一个}}}已定}},则{{nanb}}结果为第一个已定-第二个未定,{{nanb|第一个}}结果为第一个已定-第二个未定,{{nanb|第二个}}结果为第一个未定-第二个已定,{{nanb|第三个}}结果为第一个未定-第二个未定。
又如,Template:testif内容为{{{test{{{test|}}}|{{{then}}}}}},则{{testif|test=11|test11=233}}结果为233,{{testif|test=11|then=255}}结果为255,{{testif|then=333}}结果为333,{{testif|test=|then=335}}结果为。
另外,如果模板名为参数,如Template:Sample2内容为{{{{{tc}}}}},则调用{{Sample2|tc=!}}相当于{{!}},显示为|。这里,{{{{{tc}}}}}解析为{{ {{{tc}}} }}而不是{{{ {{tc}} }}}。如果Template:Sample3内容为{{{ {{tc}} }}},{{tc}}内容为in,则{{Sample3|in=11}}显示为11。
模板调用时,模板名可以是解析器函数。如{{{{NAMESPACE}}1}}相当于{{help1}},结果为这是{{Help1}}的内容。。
模板名可以是另一个模板。如Template:tctc内容为{{tc}},{{{{tctc}}}}相当于{{tc}},结果为{{{{tctc}}}}。
可以使用参数选择模板名。如Template:Hist3内容为{{{{{2}}}x|{{{1}}}}}-{{{{{3}}}x|{{{1}}}}}-{{{{{4}}}x|{{{1}}}}},Template:1x内容为{{{1}}},Template:2x内容为{{{1}}}{{{1}}},Template:3x内容为{{{1}}}{{{1}}},则{{Hist3|4|3|2|1}}结果为444-44-4 。又如Template:a2b2c2d内容为{{{{{1}}}|a{{{2}}}b{{{2}}}c{{{2}}}d}},Template:t2内容为start_{{{1}}}_middle_{{{2}}}_end,{{a2b2c2d|t2|V}}相当于{{t2|aVbVcVd}},即start_aVbVcVd_middle_{{{2}}}_end。
模板可以多次嵌套。如{{3x|{{2x|{{3x|{{1x|{{2x|{{tc}}}}}}}}}}}}结果是inin inin inin inin inin inin inin inin inin inin inin inin inin inin inin inin inin inin 。
subst、safesubst和msgnw[编辑]
模板页[编辑]
注意:因为以下内容为模板参数,故没有编辑键,点此编辑。
维基系统在生成模板页面时,实际上相当于一次没有参数赋值的模板调用,因此如果参数有默认值,将被显示。例如:模板Template:数一数的内容是
一二三{{{1|四五六}}}七八九
模板页面的内容是
- 一二三四五六七八九
跨语言链接[编辑]
模板可以含有跨语言链接,但结果是所有调用模板的条目页面都含有了该跨语言链接,这通常是非常糟糕的事情。为了仅仅让模板本身拥有跨语言链接,而不包括使用模板的条目,我们必须使用<noinclude>标识。例如:
<noinclude> [[en:Template:Europe]] [[zh:Template:欧洲]] </noinclude>
注意:在模板中使用<noinclude>标识时要小心!不要在<noinclude>之前或者</noinclude>之后加空行,否则空行将被当作模板的一部分反映在调用模板的条目中。系统会自动忽略</noinclude>之后的单个空行。
例6:使用<noinclude>标识的后果[编辑]
如果在例1中的模板Template:姓名加入跨语言链接
我是{{{姓}}}{{{名}}}。
<noinclude>
[[en:Template:Name]]
</noinclude>
用{{姓名|姓=张|名=飞}}调用例5中的模板Template:姓名时,结果是:
- 我是张飞。
如果希望得到的结果是:
- 我是张飞。
在Template:姓名加入跨语言链接应该不含有换行:
我是{{{姓}}}{{{名}}}。<NoInclude>
[[en:Template:Name]]
</NoInclude>
注意:我们推荐您使用后面一种方式使用<noinclude>标识。
如果模板不是在Template名字空间的,请干脆写:
我是{{{姓}}}{{{名}}}。<NoInclude>
[[en:Template:Name]]
不写</NoInclude>的原因是系统会在非Template的文档末尾加入空行。
模板分类[编辑]
模板也要进行分类,目的是为了更好的整理模板,以便更好的使用和管理模板。模板的分类同条目的分类相似,可以参阅有关条目分类的帮助文件,如Help:分类等,不同之处在于对于模板的分类需要使用<noinclude>标识,如果不加<noinclude>标识,则不仅模板被分类,所有使用该模板的条目也被分入同一类。
所有模板的根目录(即分类)是Category:维基百科模板,所有模板分类名最后一定要含有“模板”二字,以区别于普通条目的分类。
例7:模板分类方法[编辑]
将例1中的模板Template:姓名分为Category:人物模板,需要加入:
我是{{{姓}}}{{{名}}}。<noinclude>[[Category:人物模板]]</noinclude>
可以在X月x日用<includeonly>括住上首頁</nowiki></nowki>括住
标识[编辑]
注意:以下内容只限于模板中使用的情况,在其他名字空间使用的情况请参考相关帮助文挡。
<noinclude>和<includeonly>[编辑]
前面已经提到,<noinclude>标识的作用是将<noinclude>和</noinclude>之间的文本加入所在的模板页中,而不加入调用模板的条目或模板中,针对模板的说明、分类和跨语言连接都可以置于该标识之间。
例8:针对模板:网球男单世界第一的分类:体育模板就可以置于<noinclude>和</noinclude>之间,而对于调用该模板条目的分类:网球运动员可以置于标识之外:
[[Category:网球运动员]]<noinclude>[[Category:体育模板]]</noinclude>
另外,<noinclude>和<includeonly>的關系如下:
<noinclude>A</noinclude>B<noinclude>C</noinclude>
等價于
A<includeonly>B</includeonly>C
<includeonly>[编辑]
<includeonly>标识的作用跟<noinclude>标识的作用正好相反,是将<includeonly>和</includeonly>之间的文本不加入所在的模板页中,而加入调用模板的页面中。
上面的例8中针对调用该模板的条目的分类Category:网球运动员实际上应该置于<includeonly>和</includeonly>之间:
<includeonly>[[Category:网球运动员]]</includeonly>
这样,在Category:网球运动员分类中就不会出现Template:网球男单世界第一模板了。
替换引用与preload[编辑]
Help:替换引用的用法是:{{subst:模板名}}。它的作用是一次性将模板内容编译成维基文挡,加入到页面中去,而不是每次显示页面的时候调用有关模板。这样可以按模板当前的形式编辑条目,并使条目免受模板变化的影响,并减轻服务器负担。
subst与preload过程中的noinclude、includeonly和IncludeOnly[编辑]
- 以下部分行为是错误的,是旧版本软件的缺陷,并将随MediaWiki 1.17的部署被修正(bugzilla:5210)。
- 解释与传递
| 模板源码 |
includeonly |
noinclude |
IncludeOnly |
NoInclude | include<includeonly></includeonly>only |
| 模板显示 |
interpret |
interpret |
interpret |
同noinclude |
解释内层,传递外层 |
| 嵌入过程 |
interpret |
interpret |
interpret |
解释内层,传递外层 |
|
| subst过程 |
interpret |
传递 |
interpret |
成为includeonly |
|
| preload过程 |
interpret |
传递 |
传递 |
成为includeonly |
- 嵌套
| 模板源码 |
includeonly pair中的includeonly pair | noinclude pair中的includeonly pair |
| 模板显示 |
错乱[1] | |
| 嵌入过程 |
? |
/ |
| subst过程 |
/ |
|
| preload过程 |
正常 |
/ |
特殊的模板引用[编辑]
- 子页面引用
- 格式:{{/子页面}}
| 模板源码 |
includeonly |
noinclude |
IncludeOnly |
NoInclude | include<includeonly></includeonly>only |
| 模板显示 |
interpret |
interpret |
interpret |
同noinclude |
解释内层,传递外层 |
| 嵌入过程 |
interpret |
interpret |
interpret |
解释内层,传递外层 |
|
| subst过程 |
interpret |
传递 |
interpret |
成为includeonly |
|
| preload过程 |
interpret |
传递 |
传递 |
成为includeonly |
- 嵌套
| 模板源码 |
includeonly pair中的includeonly pair | noinclude pair中的includeonly pair |
| 模板显示 |
错乱[2] | |
| 嵌入过程 |
? |
/ |
| subst过程 |
/ |
|
| preload过程 |
正常 |
/ |
-
- 引用过程中“子页面”的意义是引用模板的页面的子页面,而非被引用的模板的子页面。
- 其它名字空间的模板引用
- 格式:{{名字空间:子页面}}如{{Template talk:!}}
保留字[编辑]
一般用法[编辑]
模板的一般用法有:
- 模板消息,例如:Template:stub传递“小作品”的消息。
- 导航模板,用于给读者提供类似的条目,例如:Template:洲。
- 信息框模板,用于同一类条目中提供统一格式的信息,例如:Template:Infobox 网球在条目右边绘制信息框,提供网球运动员的相关信息。
- 提供跨语言文本。
- 提供合成图片,例如:围棋棋谱Template:Game of Go Position和国际象棋棋谱和Template:Chess position。
- 以上几种的组合。
在对话中引用模板[编辑]
在某些情况下,我们可能需要在对话中提及某一个模板,但是如果我们直接输入模板的代码的话,模板会自动展开,这当然不是我们想要的。一种办法是使用nowiki语法,但是更好的用法,则是使用维基百科的内部连结模板。下面给出了一些例子。
| 您所输入的 | 您所看到的 | ||
|---|---|---|---|
请您不要再随意删除{{afd}}模板。
|
请您不要再随意删除
|
||
请您不要再随意删除<nowiki>{{afd}}</nowiki>模板。
|
请您不要再随意删除{{afd}}模板。 | ||
请您不要再随意删除{{tl|afd}}模板。
|
请您不要再随意删除{{afd}}模板。 | ||
欢迎新用户可以使用{{tls|welcome}}语法,
但不要使用{{tl|welcome}}语法。
|
欢迎新用户可以使用{{subst:welcome}}语法,
但不要使用{{welcome}}语法。 |
||
[[:Template:nosign]]的用法如下:
{{tlx|nosign|用户留言时间|用户名}}
|
Template:nosign的用法如下:
|
||
{{tnull|nosign|用户留言时间|用户名}}
用于补签名。
|
{{nosign|用户留言时间|用户名}}
用于补签名。 |
参见[编辑]
中文[编辑]
英文[编辑]
参考资料[编辑]
|
|||||||||||||||||||||||