今天写了篇Liquid的笔记. 由于用到大量Liquid语法, 因此markdown文件内就使用了{% raw %} ... {% endraw %}
将文章内容包裹起来,避免liquid语法被提前处理. (我不需要他处理, 我只需要他处理markdown部分).
然后Jekyll 一直报 Warning:
Warning: Excerpt modified in _posts/Notes/It/Jekyll/2015-07-28-Jekyll_Liquid.md!
Found a Liquid block containing separator ' ' and has been modified with the appropriate closing tag.
Feel free to define a custom excerpt or excerpt_separator in the document's Front Matter if the generated excerpt is unsatisfactory.
根据提示, 查了一下Jekyll的excerpt_separator
.
原来, 在Jekyll里面, 能够使用excerpt
变量来访问每篇文章post的摘要内容, 默认情况下, 这个摘要内容是第一段内容. 例如我想网页每篇文章都显示部分内容, 就可以用这个excerpt
变量.
可以通过人为指定excerpt_separator
变量, 来使文章的摘要部分遇到该excerpt_separator
为止. 一般这个excerpt_separator
可以在post前面YAML前部指定或者全局在_config.yml
中进行指定. 这样, 你的摘要就可以是好几段内容, 而不仅仅是一段内容.
例如在YAML头部指定:
---
excerpt_separator:
---
Excerpt with multiple paragraphs
Here's another paragraph in the excerpt.
Out-of-excerpt
如果要使用excerpt
变量, 可以:
{% for post in site.posts %}
-
{{ post.title }}
{{ post.excerpt }}
{% endfor %}
开始时, 不清楚原理, 找这个错误根据帖子内容, 我尝试在头部加入excerpt_separator:
问题就解决了. 不过这个解决办法的结果是, 整篇内容都变了摘要...
那为什么会报错内? 因为我从头到尾都用{% raw %} .. {% endraw %}
包起来了, Jekyll在处理时优先使用Liquid进行文档解释, 再进行Markdown解释, 这会导致Jekyll在判断excerpt
时无法找到第一段内容作为摘要 (实际我肯定有第一段内容的).
最终解决办法是, 早文章前面先写第一段内容, 再写{% raw %}
. 例如:
---
layout: post_toc
title: Jekyll Liquid语法
date: 2015-07-28 12:08:07
categories: IT
tags: Jekyll Website
note: 1
---
Liquid是 `Shopify` 开发的简易灵活安全的标记语言. 一个重要的应用场景就是Jekyll. Jekyll使用Liquid作为模板语言, 加入了一些标签和filter. Jekyll使用的不一定是最新的Liquid, 可以在Jekyll中查看Liquid的版本.
{% raw %}
## 语法基础
....
{% endraw %}
OK. 问题解决.
不过还有个遗留问题: 在Jekyll里面怎么正常表达{% endraw %}
呢...
找到了参考文献2, 眼前一亮, 问题解决! 将{%
储存为Liquid变量, 再将变量显示出来即可!
{% assign openTag = '{%' %}
{% raw %}
前面的内容...
{% endraw %}
这里是要使用endraw的内容.
- `{{ openTag }} raw %} ... {{ openTag }} endraw %}`, 不作为Liquid解释, 会作为源码显示. 例如本文上边文字部分由该对tag包围. **很重要!**.
{% raw %}
后面的内容...
{% endraw %}
- Jekyll post-excerpts
- SLaks.Blog: Writing the endraw tag in Jekyll code blocks