首页
什么是模板,为什么要用模板
您在条目的上方看到各种各样的条条框框,比如“本条目需要清理”、“本条目应避免有陈列杂项、琐碎资料的部分。”等。有时候条目右侧也能看到一个灰色的框,里面写着有关这个条目的基本信息,比如一位艺人的“生日”、“出生地”、“国籍”等。条目最下方有时候也会见到一个大方框,里面陈列着和这个条目相关的内容(称为“导航模板”,比如这个)。这些都是“模板”。模板的形式还有很多很多,有的是直接镶嵌在条目正文里面的,有的虽然看不到但是却依然影响到条目显示的内容(比如字词转换模板)。但是如果你翻翻这些条目的源代码,就会发现这些模板都长成类似“模板:Code”这样子,用一对双大括号将模板的内容扩起来。
为什么有这些麻烦的东西?有时候,一段内容会在多个条目中反复出现,这时候如果一遍一遍复制那些内容,一遍遍粘贴到各个条目里面,简直会累死人,而且大段大段的看起来也很烦人;而且,万一日后内容有变动,又要进到各个条目里面把这些内容一个个全改一遍,这会产生大量的重复劳动。模板就是为了这样的目的:只需要给重复的部分放到一个模板里、起个名字,以后需要用到这些内容的时候直接调用模板就行了。需要更改内容的时候,也只需要在模板里改动,那些调用了模板的条目也会随着模板自动变更,十分方便。
所有的模板都会放在一个叫“Template”的名字空间,即“模板名字空间”,标题名稱是“Template:模板名字
”、“模板:模板名字
”这样。在写作条目时,只需要在合适的位置放上“模板:Code”,模板就会在合适的地方显示出来了。有时候对于同一个模板,雖然显示的内容稍有差异,但大体的框架是一致的,这个时候就会用到“模板参数”,即“模板:Code”的形式,具体的用法请见下文。
需要注意的一点是,维基百科的系统——MediaWiki本身并不会自动为条目挂上模板。因此,当看到条目里面显示了“本条目需要补充更多来源”等文字时,是其他维基人人工将模板挂上去。在模板所述问题修正之后,可以自行将模板从源代码中删除,这段提示文字將自动消失。
调用模板
调用模板就是把模板内容嵌入到调用方页面。
在Template命名空间里的页面才是模板,所以模板都由Template:开头,在中文维基,以模板:开头同样有效。调用时必须使用模板标签,即{{Template:模板名}}的形式,“Template:”可以在无歧义的情况下省略。如Template:tc是一个模板,内容为“in”。如果把模板:Tl
加入某个页面,则模板:Tl的内容会在此頁面显示,即模板:Tc。
如果“Template:模板名”不存在,{{模板名}}
的作用就与[[Template:模板名]]
相同,提供一个连接到不存在页面的链接:模板:模板名。
模板可以被重定向。Template:请求来源被重定向到Template:Fact,所以{{请求来源}}效果等同于{{fact}}。有时移动模板并建立重定向后,原调用重定向的页面可能会出错,只要过一段时间(几小时)等服务器刷新缓存即可。
设定参数
在模板名后可用管道符(即竖线)追加参数(这种做法称为传参)。参数有编号参数和命名参数两种。在模板的说明文档里一般会列出该模板的所有参数。
“维基百科的编者大部分是男性”的参数名为1
。“2025-01-02”的参数名为time
。参数名为数字就是编号参数,否则就是命名参数。
编号参数的参数名(1、2、3、4等)和等号可以省略。上例的效果和{{fact|维基百科的编者大部分是男性|time=2025-01-02}}是一样的。注意,以省略形式赋值的第一个编号参数的参数名是1,而不是很多编程语言习惯的0。
调用 | 效果 |
---|---|
模板:Tlc | 模板:Catnav |
模板:Tlc | 模板:Catnav |
模板:Tlc | 模板:Catnav |
模板:Tlc | 模板:Catnav |
模板:Tlc
要么全不省略编号参数参数名,要么全都省略,否则极易出错。 可以理解为参数1第一次赋值为“页面分类”,然后“大洲”作为隐藏的参数1第二次赋值覆盖了第一次赋值的内容。 如此类推。 在编辑预览中会警示这种重复赋值问题。 |
模板:Catnav |
需要转义的参数
- 如果参数值中含有等号(
=
),传参时则必须使用参数名,即使是编号参数也要使用。 - 如果参数值中含有两个连续的右大括号(
}}
),调用参数时必须将其放入nowiki标记中,例如<nowiki>}}</nowiki>
。 - 如果参数值中含有竖线(
|
),调用参数时必须将其放入nowiki标记中,例如<nowiki>|</nowiki>
,或用{{!}}
代替<ref>模板:Cite web</ref><ref>模板:Cite web</ref>。 - 参数值中可以包含一对双方括号(即两个左方括号,两个右方括号),用于链接一个条目,或是其他名字空间的页面,但不能先写右双方括号,然后再接左双方括号。例如Template:数数1中的内容是:
[[一二{{{1}}}六七]]
- 模板:Tlc会造成模板调用失败,显示为:
-{}-{{数数1|三]]四[[五}}
- 而不是你所期望的
一二三四五六七
-{}- {{数数1|三{{))!}}四{{((!}}五}}
會變成:
-{}-模板:数数1
替换引用
放置修饰符“subst:”(substitute,替代)位于模板标签的“{{”之后,模板名之前,即可替换引用。它能在调用方页面保存时,将所调模板展开,而不是每次显示页面的时候读取有关模板。这样可以按模板当前的形式编辑条目,并使条目免受模板变化的影响,并减轻服务器负担。所以对模板的替换引用不会显示在页面历史和模板的链入页面中。
嵌入页面
模板:Main 模板标签不仅可以调用模板,也可以调用(嵌入)其他页面,就是像模板一样把被调页面的内容加入到调用方页面。
-
{{帮助讨论:模板}}
会将帮助讨论:模板中的内容加入到该页来。 - 如果调用主命名空间的条目,为了避免和调用同名模板产生歧义,需要在条目名前加冒号。如
{{:福寿岭站}}
会将福寿岭站中的内容加入到该页来,而不是调用{{福寿岭站}}(模板:福寿岭站)。
这样一来,所有页面都可以当作是模板。但是,使用在模板名字空间的页面(即真正的模板)有以下独特的好处:
- 所有被页面使用的模板都在页面编辑页显示出来。
- 当模板改变时,所有使用模板页面的服务器缓存(相对于浏览器缓存)自动被清空;而位于其他名字空间的页面,服务器缓存往往要手工清空。
而模板名字空间以外的页面一般在如下情况下被嵌入其他页面:
- 引用维基百科名字空间的界面消息。
- 将一個长页面(可以屬于主条目名字空间,假設名字就叫做“长页面”,例子)拆分为较短页面时,可以将短页面命名为“长页面/第一部分”、“长页面/第二部分”等,然后使用
{{/第一部分}}<br />{{/第二部分}}
来拼成长页面。Wikipedia:互助客栈 (全部)就是一个好例子。
一个模板可以调用另一个模板,它也可以调用它自己,但自我调用只有一层有效。例如:Template:模板1的内容是“一次,{{模板1}}”
,在Template:模板1中将显示:“一次,一次,{{模板1}}”,如果其他条目调用该模板,所加入的文字将是
在2010年前,如果把其他模板重定向至某模板,该模板又引用重定向,且多次自我调用均为不同重定向,则该模板可以实现多次自我调用。MediaWiki后来取消此功能。如模板:Tl的结果为模板:RR。
模板中变量在调用模板的地方被赋值。因此,如果一个模板中含有{{PAGENAME}}
,该模板被某页面调用,相应的位置显示的将是调用方的名称,而不是被调模板的名称。
一个页面所调用的所有模板都在该页编辑页面中列出,并提供相应的链接,而且:
- 一个段落的编辑页面不会列出任何模板;
- 编辑旧版本的页面,这个列表仍然是当前最新的;
- 可加入模板擴展語法#if, #ifeq, #ifexist, #ifexpr, 或 #switch;
- 如果不真正提交编辑,仅仅在预览中使用的模板不被列出。
- 如果模板名里面嵌套另一个模板,如{{{{tc}}{{CURRENTDAY}}}},则会得到{{模板:Tc2}};编辑页面里会显示[[Template:模板:Tc2]]。
- 模板名#后的内容会忽略。
请注意,如果页面结尾没有换行,编辑页面中总是在结尾添加一个换行,但这并不影响模板的某些效果,即这个换行不真正起作用。例如:
{{编号演示}}{{编号演示}} {{编号演示}}
创建并编辑模板
维基百科现存大量模板供编者使用,如果有现存模板可以完成您的任务,则应该调用现有模板,而不是另建新模板。
您在新建模板前,请先搜索相应的模板名称,如“Template:维基百科模板”。新建模板后,请在Wikipedia:模板消息内添加您新建的模板的信息,并请对模板进行分类。模板分类的方法请参考Category:维基百科模板以及Category talk:维基百科模板中的相关内容。
当您在模板中需要使用图标时,建议使用维基共享资源水晶风格图标库中提供的图标。
模板页面会自动调用这个模板本身,实际上相当于一次没有参数赋值的模板调用,因此如果参数有默认值,将被显示。例如:模板Template:数一数的内容是
一二三{{{1|四五六}}}七八九
模板页面的内容是
读取参数
在模板页面中,用三个大括号可以读取参数,例如:模板:Code可以读取参数1,如果在模板调用中参数1没有赋值,则使用参数1的默认值作为参数1的赋值。另见Help:默认参数
注意:参数默认值和参数赋空值是不同的。