zh.m.wikipedia.org
Help:模板
本页面為一篇​操作指南​,用於介紹中文维基百科社群的一些实现和操作方式。
本文​僅是一篇​論述​,不屬於​方針或指引​。如果本指南與相關方針或指引發生衝突或存在不一致的情况,請以方針或指引的條文為準。
模板​(英語:​Template​)是维基百科的系统中的一项功能,类似于​计算机语言​中的​子程序​。本文提供在​MediaWiki​创建模板的技术指南;维基百科使用​MediaWiki​并对模板有一定的规范。另外也可参考:
什么是模板,为什么要用模板
您在条目的上方看到各种各样的条条框框,比如“本条目需要清理”、“本条目应避免有陈列杂项、琐碎资料的部分。”等。有时候条目右侧也能看到一个灰色的框,里面写着有关这个条目的基本信息,比如一位艺人的“生日”、“出生地”、“国籍”等。条目最下方有时候也会见到一个大方框,里面陈列着和这个条目相关的内容(称为“​导航模板​”,​比如这个​)。这些都是“模板”。模板的形式还有很多很多,有的是直接镶嵌在条目正文里面的,有的虽然看不到但是却依然影响到条目显示的内容(比如​字词转换模板​)。但是如果你翻翻这些条目的源代码,就会发现这些模板都长成类似“​{{模板名字|模板参数}}​”这样子,用一对双大括号将模板的内容扩起来。
为什么有这些麻烦的东西?有时候,一段内容会在多个条目中反复出现,这时候如果一遍一遍复制那些内容,一遍遍粘贴到各个条目里面,简直会累死人,而且大段大段的看起来也很烦人;而且,万一日后内容有变动,又要进到各个条目里面把这些内容一个个全改一遍,这会产生大量的重复劳动。模板就是为了这样的目的:只需要给重复的部分放到一个模板裡、起个名字,以后需要用到这些内容的时候直接调用模板就行了。需要更改内容的时候,也只需要在模板里改动,那些调用了模板的条目也会随着模板自动变更,十分方便。
所有的模板都会放在一个叫“Template”的​命名空间​,即“​模板命名空间​”,标题名稱是“​Template:模板名字​”、“​模板:模板名字​”这样。在写作条目时,只需要在合适的位置放上“​{{模板名字}}​”,模板就会在合适的地方显示出来了。有时候对于同一个模板,雖然显示的内容稍有差异,但大体的框架是一致的,这个时候就会用到“模板参数”,即“​{{模板名字|模板参数}}​”的形式,具体的用法请见下文。
需要注意的一点是,维基百科的系统——MediaWiki本身并不会自动为条目挂上模板。因此,当看到条目里面显示了“本条目需要补充更多来源”等文字时,是其他维基人人工将模板挂上去。在模板所述问题修正之后,可以自行将模板从源代码中删除,这段提示文字將自动消失。
调用模板
调用模板就是把模板内容嵌入到调用方页面。
在Template​命名空间​里的页面才是模板,所以模板都由​Template:​开头,在中文维基,以​模板:​开头同样有效。调用时必须使用​模板标签​,即{{Template:模板名}}的形式,“Template:”可以在无歧义的情况下省略。如​Template:tc​是一个模板,内容为“in”。如果把
{{tc}}
加入某个页面,则{{​tc​}}的内容会在此頁面显示,即​{{tlc|...}}​
如果“​Template:模板名​”不存在,​{{模板名}}​的作用就与​[[Template:模板名]]​相同,提供一个连接到不存在页面的链接:​Template:模板名​
模板可以被​重定向​。例如​Template:请求来源​被重定向到​Template:Fact​,所以{{请求来源}}效果等同于{{fact}}。有时移动模板并建立重定向后,原调用重定向的页面可能会出错,只要过一段时间(几小时)等服务器刷新缓存即可。
设定参数
在模板名后可用管道符(即竖线)追加参数(这种做法称为​传参​)。参数有编号参数和命名参数两种。在模板的说明文档里一般会列出该模板的所有参数。
例如,​{{fact|1=维基百科的编者大部分是男性|time=2021-12-06}}​得到「​维基百科的编者大部分是男性​[來源請求]​」。
“维基百科的编者大部分是男性”的参数名为​1​。“2021-12-06”的参数名为​time​。参数名为数字就是​编号参数​,否则就是​命名参数​
编号参数的参数名(1、2、3、4等)和等号可以省略。上例的效果和{{fact|维基百科的编者大部分是男性|time=2021-12-06}}是一样的。注意,以省略形式赋值的第一个编号参数的参数名是1,而不是很多编程语言习惯的0。
调用效果
{{catnav|页面分类|地理|大洲|亚洲|亚洲国家}}
{{catnav|​0=页面分类​|1=地理|2=大洲|3=亚洲|4=亚洲国家}}
地理 > 大洲 > 亚洲 > 亚洲国家 > 模板
{{catnav|1=页面分类|2=地理|3=大洲|4=亚洲|5=亚洲国家}}
{{catnav|5=亚洲国家|4=亚洲|3=大洲|2=地理|1=页面分类}}
{{catnav|1=页面分类|2=地理|​大洲​|4=亚洲|​亚洲国家​}}
要么全不省略编号参数参数名,要么全都省略,否则极易出错。
可以理解为参数1第一次赋值为“页面分类”,然后“大洲”作为隐藏的参数1第二次赋值覆盖了第一次赋值的内容。
如此类推。
在编辑预览中会警示这种重复赋值问题。
大洲 > 亚洲国家 > 亚洲 > 模板
需要转义的参数
[[一二{{{1}}}六七]]
{{数数1|三]]四[[五}}​会造成模板调用失败,显示为:
{{数数1|三]]四[[五}}
而不是你所期望的
一二三五六七
不過可以使用
{{!((}}
([[)及
{{))!}}
(]])來讓這個結果成真,因此:
{{数数1|三{{))!}}四{{((!}}五}}
會變成:
一二三五六七
替换引用
主页面:Help:替换引用
另见​分类:应被替换引用的模板
放置修饰符“subst:”(substitute,替代)位于模板标签的“{{”之后,模板名之前,即可替换引用。它能在调用方页面保存时,将所调模板展开,而不是每次显示页面的时候读取有关模板。这样可以按模板当前的形式编辑条目,并使条目免受模板变化的影响,并减轻服务器负担。所以对模板的替换引用不会显示在页面历史和模板的链入页面中。
例如{{​fact/auto​}}和{{​未签名​}}都是应被替换引用的模板。
嵌入页面
主页面:WP:嵌入包含
模板标签不仅可以调用模板,也可以调用(嵌入)其他页面,就是像模板一样把被调页面的内容加入到调用方页面。
这样一来,所有页面都可以当作是模板。但是,使用在模板命名空间的页面(即真正的模板)有以下独特的好处:
而模板命名空间以外的页面一般在如下情况下被嵌入其他页面:
一个模板可以调用另一个模板,它也可以调用它自己,但自我调用只有一层有效。例如:​Template:模板1​的内容是​“一次,{{模板1}}”​,在​Template:模板1​中将显示:“一次,一次,{{模板1}}”,如果其他条目调用该模板,所加入的文字将是
一次,​检查到模板循环:​Template:模板1
在2010年前,如果把其他模板重定向至某模板,该模板又引用重定向,且多次自我调用均为不同重定向,则该模板可以实现多次自我调用。MediaWiki后来取消此功能。如{{​RR​|7}}的结果为RR-​检查到模板循环:​Template:RR7​
模板中​变量​在调用模板的地方被赋值。因此,如果一个模板中含有​{{PAGENAME}}​,该模板被某页面调用,相应的位置显示的将是调用方的名称,而不是被调模板的名称。
一个页面所调用的所有模板都在该页编辑页面中列出,并提供相应的链接,而且:
请注意,如果页面结尾没有换行,编辑页面中总是在结尾添加一个换行,但这并不影响模板的某些效果,即这个换行不真正起作用。例如:
{{编号演示}}{{编号演示}} {{编号演示}}
的结果是:
  1. 北京
  2. 上海
  3. 北京
  4. 上海
  1. 北京
  2. 上海
创建并编辑模板
维基百科现存大量模板供编者使用,如果有现存模板可以完成您的任务,则应该调用现有模板,而不是另建新模板。
您在新建模板前,请先搜索相应的模板名称,如“Template:维基百科模板”。新建模板后,请在​Wikipedia:模板消息​内添加您新建的模板的信息,并请对模板进行分类。模板分类的方法请参考​Category:维基百科模板​以及​Category talk:维基百科模板​中的相关内容。
当您在模板中需要使用图标时,建议使用维基共享资源​水晶风格图标库​中提供的图标。
模板页面会自动调用这个模板本身,实际上相当于一次没有参数赋值的模板调用,因此如果参数有默认值,将被显示。例如:模板​Template:数一数​的内容是
一二三{{{1|四五六}}}七八九
模板页面的内容是
一二三四五六七八九
读取参数
在模板页面中,用三个​大括号​可以读取参数,例如:​{{{参数1|参数1的默认值}}}​可以读取​参数1​,如果在模板调用中参数1没有赋值,则使用​参数1的默认值​作为参数1的赋值。另见​Help:默认参数
注意:​参数默认值和参数赋空值是不同的。
例1:含有命名参数的模板
例如:​Template:姓名​的模板,内容为:
我是{{{姓}}}{{{名}}}。
如果用{{姓名}}调用这个模板,將会看到:
我是{{{姓}}}{{{名}}}。
如果用
{{姓名|姓=张|名=飞}}
,我们则看到:
我是张飞。
例2:含有编号参数的模板
再来一个例子,说明一个编号参数的定义和调用:我们还是先要定义一个带参数的模板,例如模板​Template:数数​的内容是
一二三{{{1|四五六}}}七八九
赋值调用{{数数|六五四}}的结果是:
一二三六五四七八九
赋空值调用{{数数|}}的结果是:
一二三七八九
未赋值调用,就会调用默认值,
{{数数}}
的结果是:
一二三四五六七八九
编号参数还是命名参数?
编号参数的优点
命名参数的优点
未赋值且没有默认值的参数
例如:模板​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:参数迭代
當模板需要隔層叫用時(例如有一個父模板,然後建立許多子模板,子模板使用父模板的功能)要讓底層(A模板叫用B模板,B模板為A模板的底層)層使用上層參數時,則需要参数迭代。
最简单的参数迭代办法就是在模板中用同样的参数名。
例如:​Template:姓名国籍
{{姓名|姓={{{姓}}}|名={{{名}}}}}{{{国籍}}}人。
我現在叫用「​{{姓名国籍|姓=王|名=小奇|国籍=火星}}​
結果為「我是王小奇。火星人。」
您可能會認為,​Template:姓名​模板也有包含​{{{姓}}}​和​{{{名}}}​參數。
因此我們可以試著將​Template:姓名国籍​改成
{{姓名}}{{{国籍}}}人。
此時叫用「​{{姓名国籍|姓=王|名=小奇|国籍=火星}}​
結果為「我是{{{姓}}}{{{名}}}。火星人。」
這是因為在​Template:姓名​模板中,無法讀取到​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, ...​,参见​WP:命名空间​、​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}}显示为{{{ {{tlc|...}} }}}。
模板调用时,模板名可以是解析器函数。如{{{{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}}}{{{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}}}}}}}}}}}}结果是​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​{{tlc|...}}​
模板分类
模板也要进行分类,目的是为了更好的整理模板,以便更好的使用和管理模板。模板的分类同条目的分类相似,可以参阅有关条目分类的帮助文件,如​Help:分类​等,不同之处在于对于模板的分类需要使用​<noinclude>​标识,如果不加​<noinclude>​标识,则不仅模板被分类,所有使用该模板的条目也被分入同一类。
所有模板的根目录(即分类)是​Category:维基百科模板​,所有模板分类名最后一定要含有“模板”二字,以区别于普通条目的分类。
例7:模板分类方法
将例1中的模板​Template:姓名​分为​Category:人物模板​,需要加入:
我是{{{姓}}}{{{名}}}。<noinclude>[[Category:人物模板]]</noinclude>
标识
注意:​以下内容只限于模板中使用的情况,在其他命名空间使用的情况请参考相关帮助文挡。
<noinclude>、<includeonly>和<onlyinclude>
注意:​在模板中使用​<noinclude>​标识时要小心!​<noinclude>​应接在模板原始码(例如结尾双大括号}})或文字最后一列的后方,不要新起一列;也不要在​</noinclude>​之后​加空行​(虽然系统会自动忽略​</noinclude>​之后的单个空行)否则空行将被当作模板的一部分反映在调用模板的条目中。 <noinclude>​标识的作用是将​<noinclude>​和​</noinclude>​之间的文本加入所在的模板页中,而不加入调用模板的条目或模板中,针对模板的说明、分类都可以置于该标识之间。
<includeonly>​标识的作用跟​<noinclude>​标识的作用正好相反,是将​<includeonly>​和​</includeonly>​之间的文本​不​加入所在的模板页中,而加入调用模板的页面中。
<onlyinclude>​标识不常用,其作用是只有被​<onlyinclude>​和​</onlyinclude>​包含的文本才出现在调用模板的页面中,模板的其他内容不出现在调用模板的页面中。
原始碼原始頁面看到的其他頁面看到的
<noinclude> text1 </noinclude> text2text1 text2text2
<onlyinclude> text1 </onlyinclude> text2text1 text2text1
<includeonly> text1 </includeonly> text2text2text1 text2
subst与preload过程中的noinclude、includeonly和IncludeOnly
以下部分行为是错误的,是​旧版本软件的缺陷​,并将​随MediaWiki 1.17的部署被修正​(​bugzilla:5210​)。
解释与传递
模板源码includeonlynoincludeincludeonlynoincludeinclude<includeonly></includeonly>only
模板显示interpretinterpretinterpret同noinclude解释内层,传递外层
嵌入过程interpretinterpretinterpret解释内层,传递外层
subst过程interpret传递interpret成为includeonly
preload过程interpret传递传递成为includeonly
测试页
嵌套
模板源码includeonly pair中的includeonly pairnoinclude pair中的includeonly pair
模板显示错乱[1]
嵌入过程/
subst过程/
preload过程正常/
特殊的模板引用
子页面引用
格式:{{/子页面}}
示例
模板源码includeonlynoincludeIncludeOnlyNoIncludeinclude<includeonly></includeonly>only
模板显示interpretinterpretinterpret同noinclude解释内层,传递外层
嵌入过程interpretinterpretinterpret解释内层,传递外层
subst过程interpret传递interpret成为includeonly
preload过程interpret传递传递成为includeonly
测试页
嵌套
模板源码includeonly pair中的includeonly pairnoinclude pair中的includeonly pair
模板显示错乱[2]
嵌入过程/
subst过程/
preload过程正常/
引用过程中“子页面”的意义是引用模板的页面的子页面,而非被引用的模板的子页面。
其它命名空间的模板引用
格式:{{命名空间:子页面}}如{{Template talk:!}}
一般用法
模板的一般用法有:
提及模板
在某些情况下,我们可能需要​提及某一个模板(而非调用它)​。提及模板可用​nowiki标签​,但是已经有热心的用户建立了专门的模板,用于提及模板。
您所输入的您所看到的
请您不要再随意删除{{afd}}模板。请您不要再随意删除 模板。
请您不要再随意删除<nowiki>{{afd}}</nowiki>模板。请您不要再随意删除{{afd}}模板。
请您不要再随意删除{{​tl​|afd}}模板。请您不要再随意删除{{​afd​}}模板。
欢迎新用户可以使用{{​tls​|welcome}}语法,但不要使用{{tl|welcome}}语法。欢迎新用户可以使用{{​subst​:​welcome​}}语法,但不要使用{{​welcome​}}语法。
[[:Template:nosign]]的用法如下:
{{​tlx​|nosign|用户留言时间|用户名}}
Template:nosign​的用法如下:
{{​nosign​|用户留言时间|用户名}}
{{​tnull​|nosign|用户留言时间|用户名}}用于补签名。{{nosign|用户留言时间|用户名}}​用于补签名。
类似语法
{{CURRENTYEAR}}、{{DISPLAYTITLE:}}等等为魔术字。魔术字可以返回关于当前页面、wiki站点或日期的信息,也可以设置数据。参见​Help:魔术字#变量​
调用​解析器函数​的语法是{{#xxx:}}。如{{#ifeq:{{{lang}}}|zh|我使用中文|I<ins> don't</ins> use Chinese}}给出I don't use Chinese。
读取模板参数是三个大括号,形如{{{1|}}}、{{{date}}}。详见​#读取参数​
常见问题
我可以在多个语言维基百科中使用同一个模板吗?
不能。如果你要这么做,只能在各个维基百科中分别创建该模板。
开头是“Template:”,“template:”,還是“模板:”?
都行。英文不区分大小写,中文会繁简自动转换。一定要用​英文半角​冒號。
我可以使用参数吗?
可以。请参阅​此頁上方​
一个页面中最多可以使用多少模板?
2MB。参见​Wikipedia:模板限制​
我已经修改了模板,但为什么页面不更新呢?
有很多原因。第一、你可能没有刷新页面。在你的浏览器里使用刷新(Refresh)功能。第二、系统可能存在缓存漏洞(bug)。一种解决方法是​编辑​使用模板的页面,然后什么也不修改就​保存​,这样你就强制该页面进行刷新了。这一操作不会在历史中留下记录。
我可以修改模板的名字吗?
可以。移动模板跟移动普通页面一样。模板也可以重定向。
我可以在一个模板中使用另一个模板吗?
可以。当然可以在一个模板的内容中调用另一个模板。但如果使用诸如{{一个模板{{另一个模板}}}}这样的语句,假设{{另一个模板}}的内容为“123”,则实际上是{{一个模板123}}。
参考资料
  1. ^ Help:魔术字#.E5.85.B6.E4.BB.96​. 2015-08-02.
  2. ^ MediaWiki更新记录. 2015-08-02.
参见
中文
英文
最后编辑于2021年10月18日 (星期一) 09:02
维基百科
除非另有声明,本网站内容采用​CC BY-SA 3.0授权。
隐私政策
使用条款
桌面版
首页随机 附近 登录 设置 资助维基百科关于维基百科免责声明
语言监视编辑