替换引用是页面保存时维基文本的自动转换,以使维基文本引用一个或多个模板、变量或解析器函数。
将subst:
或者safesubst:
放在两个开大括号之后,不加空格,就像例子{{subst:FULLPAGENAME}}
和{{safesubst:FULLPAGENAME}}
一样,这样就是替换引用。 在多级替换中,safesubst:
很有用,参见下方。
修饰符“subst:”(“substitute”,“替代”)位于模板、变量、解析函数的“{{”之后。但subst对参数的“{{{”不起作用。
它能在引用页面保存时(而非查看时),将维基代码自动替换,分别为:
对模板的替换引用不会显示在页面历史和模板的链入页面等中。
假设在A页面有以下模板,当前时间为12:00:00
Time:{{#time|H:i:s}}
如果在B页面嵌入:{{subst:A}}
,则保存的内容为该模板的源代码(Time:{{#time|H:i:s}}
)。
如果将A页面改为下列形式:
Time:{{subst:#time|H:i:s}}
则在B页面嵌入{{subst:A}}
时,保存的内容为Time:12:00:00
,这就是一个最基本的替换引用的例子。
请注意这种对模板的替换不会自动重复进行:如果被替换引用的模板又引用了其他模板,那个模板不会被替换引用。你可以随后加上subst,做手动转换。这种逐步的替换引用对于分析模板调用原理很有用。但是,复杂的是:
如果你想修改替换引用生成的目标代码,你必须先保存,因为预览时替换引用还没发生,替换引用只在保存时发生。
另一种方式就是手动替换,复制模板的源代码再编辑。另一种方式是使用“msgnw:”修饰符(参见:Help:魔术字/解析器函数)。
对“~~~~
”进行替换引用没有效果。
必须被替换引用的模板可以使用{{Substituted}}在模板文档里作提醒,该模板会被显示在Category:必须被替换引用的模板里。
对变量替换引用与对模板的类似。比如时间戳:
{{subst:CURRENTYEAR}}年{{subst:CURRENTMONTHNAME}}{{subst:CURRENTDAY}}日, {{subst:CURRENTTIME}} (UTC)
得到:
2024年11月21日, 19:32 (UTC)
对解析函数的替换引用与模板一样,但是“subst:”与“#”之间不能有分隔。例如:
{{subst:#time:c}}
得到 2012-02-08T08:08:32+00:00
如果某模板包含位于nowiki或pre标记之内的签名或替换引用,他们将被解释并展开,但nowiki或pre标记仍保留。
是否进行替换可由特定参数决定,由此还可进行多重替换。原理如下:
当页面A对template:B的引用包含“subst=subst:”时,template:B对template:C的引用也是替换引用,template:C对template:D也是。若页面A不含“subst=subst:”时,便不会替换,且不会出现错误。由此,条件替换和多重替换可以实现。
在被替换的模板中使用“仅包含”和“不包含”标签,可以在引用时实现魔术般的技巧。
代码~<includeonly>~</includeonly>~~
显示为~~~,当被引用时显示为~~~~,当被替换引用时展开为用户签名。而当一包含了{{<includeonly>subst:</includeonly>CURRENTTIME}}的模板被替换引用并保存时,不变的时间就被保存在维基文字中,替换了随时间变化的时间变量。变量也是如此。样例:
简单的说:仅包含标签可被用于专门被替换引用的模板、变量,即在subst:前后加上仅包含标签。
模板内部如果嵌入了引用替换方式的其它模板或者有引用替换效果的签名~~~、~~~~、~~~~~时,模板自身也只能以引用替换的方式使用,即以{{subst:模板名|相关参数}}的方式来使用模板。比如模板A里包含了
这是一个关于{{<includeonly>subst:</includeonly>B}}的例子
那么,只能这样使用模板A:
{{subst:A}}
这种情况下可以对模板B使用safesubst,safesubst允许该模板既可以被嵌入又可以被替换引用。
若要替换引用一个变量,则在声明和使用时均要在#
号前加上subst:
或safesubst:
。
对于产生变量的模板,被替换引用后这些变量均无法在被嵌入页面使用。
自动产生模板的源代码。
注意:由该修饰符输出的源代码不能作为字符串处理的对象。
用于既需要被替换引用也需要被嵌套的模板。
|