Jekyll Liquid使用小问题: {% raw %} 引发的问题

今天写了篇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: <!--more-->
---

Excerpt with multiple paragraphs

Here's another paragraph in the excerpt.
<!--more-->
Out-of-excerpt

如果要使用excerpt变量, 可以:

<ul>
  {% for post in site.posts %}
    <li>
      <a href="{{ post.url }}">{{ post.title }}</a>
      {{ post.excerpt }}
    </li>
  {% endfor %}
</ul>

开始时, 不清楚原理, 找这个错误根据帖子内容, 我尝试在头部加入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 %}
  1. Jekyll post-excerpts
  2. SLaks.Blog: Writing the endraw tag in Jekyll code blocks
展开阅读全文

没有更多推荐了,返回首页