如何在Jekyll的Liquid中为page.test添加自定义属性?
解决Jekyll中Front Matter变量添加属性及链接失效问题
首先得搞清楚为啥链接会失效:Jekyll里Front Matter定义的page.test是个静态哈希对象,Liquid模板语言不允许直接给已存在的对象追加新属性。你之前尝试把addr改成test.addr(正确写法应该是page.test.addr),但这个属性根本没被定义过,自然输出为空,链接就失效了。
下面给你两种可行的解决办法:
方法一:直接在Front Matter里预定义属性
这是最直接的方式,如果你提前知道要加的属性,直接在Front Matter里写好就行:
layout: post title: "Welcome to Jekyll!" test: name: google.com addr: https://www.google.com
然后模板里直接用{{ page.test.addr }},链接就能正常渲染了:
[glink]: {{ page.test.addr }}
方法二:用Liquid的merge过滤器动态合并属性
如果需要在模板里动态生成属性,那就用merge过滤器创建一个新的哈希对象,把原有的page.test和新属性合并:
{% assign updated_test = page.test | merge: { addr: "https://www.google.com" } %} # Heading This is a link to [the Google homepage!][ghome] This is another link that [may or maynot work][glink] [ghome]: https://google.com [glink]: {{ updated_test.addr }}
这样updated_test就包含了原来的name和新的addr属性,链接就能正常解析啦。
总结一下:Front Matter的对象是静态的,不能直接修改属性,要么提前定义,要么用merge生成新对象来包含新属性~
内容的提问来源于stack exchange,提问作者Somenath Sinha
相关产品推荐
相关产品推荐

