如何在Jekyll中获取文章摘要?

52

我正在使用Jekyll创建一个新的博客。

在主页面上,将列出我最近的10篇文章。

这个列表中的条目将包括标题、发布日期和摘要,很可能是第一段。

我只熟悉基本模板的Jekyll用法,所以页面中只能放一个变量或者整篇文章。

有没有一种方法可以避免在分页器中使用post.content,仅包含我定义的某一点之前的内容 (例如“{% endexcerpt %}”)?


请参考这个答案 - barfuin
5个回答

96

类似于{{ post.content | strip_html | truncatewords: 50 }}这样的内容会产生更加一致的节选。它获取前50个单词并去除任何格式。


同意。这样好多了。我以前用摘录功能,但它会在断句处出现各种怪异的问题(似乎只在第一段)。 - adrianmcli
1
你如何处理链接呢?例如,如果你有这样的内容:“这是一篇文章。还有一个链接”,那么你发布的代码片段将显示整个原始文本,而不是智能地将链接显示为文本。 - Karolis Ramanauskas
6
得到答案了,使用{{ post.content | markdownify | strip_html | truncatewords: 50 }}。 - Karolis Ramanauskas
如何获取post.content但不包括post.title?我不想在文章摘要中包含标题。 - Ferit
2
嗨,我发现这个句子只能用英文写,当我想写一篇中文文章时,我该如何使用这个功能呢?谢谢! - taylor
显示剩余2条评论

59

当然,您可以使用{{ post.excerpt }}替代{{ post.content }}

如果您不喜欢自动生成的节选内容,您还可以手动覆盖它们。

有关如何执行此操作的完整文档,请参见: http://jekyllrb.com/docs/posts/#post-excerpts


4
记得在实际文章中使用 <!--more--> 来告诉 Jekyll 在摘要内容中应该“截断”文章,或者在 _config.yml 中全局设置插入分隔符。 - eQ19

5

使用

 {{ post.content | markdownify | strip_html | truncatewords: 50 }}

使用{{ post.excerpt }}{{ post.content }}的替代方法。

这将提供一致长度的未格式化文本块,其中不包含原始的markdown内容。整洁。


感谢@karolis-ramanauskas这条评论,我已将其制作成正式答案以便更好地展示。


4
为了获得每篇文章的自定义长度摘要,您可以在文章的front matter中添加一个excerpt_separator变量。如果将此变量设置为<!--end_excerpt-->,那么post.excerpt将包括<!--end_excerpt-->之前的所有内容,不包括<!--end_excerpt-->标签本身。
---
excerpt_separator: <!--end_excerpt-->
---

This is included in excerpts.

This is also included in excerpts.

<!--end_excerpt-->

But this is not.

为了避免在每篇文章的前置元数据中添加excerpt_separator而浪费精力,你可以直接在_config.yml文件中设置它。

0
我的解决方法是:将以下代码添加到config.yml中:excerpt_separator: "<!--more-->" # 每篇博客文章的全局摘要分隔符,然后记得重新启动jekyll本地服务器。所有对config.yml的更改都需要重启才能生效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接