在Github Pages博客内容中插入liquid语句示例
2013-10-14由于Github Pages在后端使用jekyll来处理博客文件,对于文章内部插入的原本用来做示例的liquid语句,会被它解析而不是展示原本的内容,比如说,我在文中插入这样的示例(org-mode):
#+begin_example {% for post in site.posts limit:5 %} {{ post.title }} {% endfor %} #+end_example
最后得到的内容却会是这样的:
找工作啦 ZMonster's AI Notes(Alpha) #2:模型汤、推测解码、幻觉的类型与定义、GPT top_logprobs 我的年度总结所使用到的数据分析和可视化工具 我的2023 ZMonster's AI Notes(Alpha) #1
这显然不是我们想要的,解决办法也很简单,那就是在每一个liquid语句前后用
{% raw %}
和
{% endraw %}
包裹起来,这样liquid模板引擎会将内部的文本作为普通文本处理而不是按照liquid语法去解析它,下面是正确的示例:
#+begin_example {% raw %}{% for post in site.posts %}{% endraw %} {% raw %}{{ post.title }}{% endraw %} {% raw %}{% endfor%}{% endraw %} #+end_example
就能够得到这样正确的示例结果:
{% for post in site.posts %} {{ post.title }} {% endfor %}
不过,还没完呢,比如说,像
{% raw %}
这样的标签,又怎么在文中显示呢?用刚才说的方法是不行的,不信试试在文中直接这样写
{% raw %} {% raw %} {% endraw %}
本地运行
jekyll build
试试,没错,会得到一个错误。下面的写法同样会得到错误。
{% raw %} {% endraw %} {% endraw %}
究其原因,应该是liquid的 raw/endraw 标签在匹配时按照就近原则吧——这个是我推测的。
最后我在Stack Overflow上找到了一个解决方案。
像这样:
{{ "{% raw " }}%}
就可以得到:
{% raw %}
的显示效果。
也就是说,把 {% 和 %} 这一对标签的开闭符号分开了,一部分用双引号括起来并用 {{ 和 }} 包裹起来,另一部分则按照平常的方式书写。同样的, {{ 和 }} 也可以通过这种方式来处理。本文第五个示例就是这么得到的。
自己动手试一试吧!