写博客已经嵌入到了 Jekyll 中。你把博客文章写成文本文件,Jekyll提供了把它变成博客所需的一切。
The Posts Folder
_posts
文件夹是您的博客文章所在的位置。你通常用 Markdown 写文章,当然也支持HTML。
Creating Posts
要创建一篇文章,请按以下格式将文件添加到 _posts
目录:
YEAR-MONTH-DAY-title.MARKUP
其中YEAR
是一个四位数,MONTH
和DAY
都是两位数,MARKUP
是表示文件中使用的格式的文件扩展名。例如,以下是有效的 post 文件名示例:
2011-12-31-new-years-eve-is-awesome.md
2012-09-12-how-to-write-a-blog.md
所有博客文章文件都必须以 front matter 开头,它通常用于设置 layout 或其他元数据。对于一个简单的例子,它可以是空的:
---
layout: post
title: "Welcome to Jekyll!"
---
# Welcome
**Hello world**, this is my first Jekyll blog post.
I hope you like it!
ProTip™: 链接到其他文章
使用 post_url tag 链接到其他文章,而不必担心网站 permalink 样式更改时 URLs 会中断。
注意字符集
内容处理程序可以修改某些字符,使其看起来更好。例如,Redcarpet 中的 smart
扩展将标准ASCII引号字符转换为Unicode字符大括号。为了让浏览器正确显示这些字符,请通过在布局的 <head>
中包含 <meta charset=“utf-8”>
来定义字符集 meta value 。
Including images and resources
在某些情况下,您会希望在文本内容中包含图像、下载或其他数字资产。一种常见的解决方案是在项目目录的根目录中创建一个文件夹,称为类似 assets
的文件夹,其中可以放置任何图像、文件或其他资源。然后,在任何文章中,使用网站的根目录作为要包含的 asset 的路径,就可以链接到它们。做到这一点的最佳方法取决于网站(子)域和路径的配置方式,但以下是Markdown中的一些简单示例:
在文章中包含图像 asset :
... which is shown in the screenshot below:

链接到PDF供读者下载:
... you can [get the PDF](/assets/mydoc.pdf) directly.
Displaying an index of posts
由于 Liquid 及其 tags ,在另一个页面上创建文章索引应该很容易。以下是一个简单的示例,说明如何创建指向博客文章的链接列表:
<ul>
{% for post in site.posts %}
<li>
<a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
你可以完全控制你如何(以及在哪里)展示你的文章,以及你如何构建你的网站。如果你想了解更多,你应该阅读更多关于 how templates work with Jekyll 的信息。
请注意,post
变量只存在于上面的 for
循环中。如果希望访问当前渲染的页面/文章的变量(其中包含 for
循环的文章/页面的变量),请改用 page
变量。
Tags and Categories
Jekyll 对博客文章中的 tags 和 categories 有一流的支持。
Tags
文章的 Tags 是在文章的 front matter 中使用单个条目的 tag
“键” 或多个条目的 tags
来定义的。
由于 Jekyll 期望多个项目映射到 tag
“键”,因此如果字符串条目包含空格,它将自动拆分该条目。例如,当 front matter tag: classic hollywood
将被处理成一个单一的实体 "classic hollywood"
时,front matter tags: classic hollywood
会被处理成条目数组 ["classic", "hollywood"]
。
无论选择哪一个 front matter key ,Jekyll 都会存储映射到 plural key 的 metadata ,而 plural key 是暴露于 Liquid 模板的 。
当前网站中注册的所有 tags 都会通过 site.tags
暴露给 Liquid 模板。对页面上的 site.tags
迭代会产生另一个包含两个项目的数组,其中第一个项目是 tag 的名称,第二个项目是包含该 tag 的文章数组。
{% for tag in site.tags %}
<h3>{{ tag[0] }}</h3>
<ul>
{% for post in tag[1] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
Categories
文章的 Categories 功能类似于上面的 tags :
- 它们可以使用"键"
category
或categories
(遵循与 tags 相同的逻辑)通过 front matter 进行定义。 - 网站中注册的所有 categories 都通过
site.categories
暴露在Liquid模板中。site.categories
可以迭代(类似于上面 tags 的循环)。
然而,categories 和 tags 之间的相似性到此为止。
与 tags 不同,文章的 categories 也可以由文章的文件路径定义。_posts 以上的任何目录都将作为一个类别读取。例如,如果一篇文章位于路径 movies/horror/_posts/2019-05-21-bride-of-chucky.markdown
,那么 movies
和 horror
将自动注册为该文章的类别。
当文章也有定义类别的 front matter 时,如果还没有出现,它们就会被添加到现有列表中。
categories 和 tags 之间的标志性区别在于,文章的类别可以合并到为文章生成的URL 中,而 tags 不能。
因此,根据 front matter 的内容是 category: classic hollywood
, 还是 categories: classic hollywood
,上面的示例文章的URL将分别为 movies/horror/classic%20hollywood/2019/05/21/bride-of-chucky.html
或
movies/horror/classic/hollywood/2019/05/21/bride-of-chucky.html
。
Post excerpts
您可以通过在文章上使用 excerpt
变量来访问文章内容的片段。默认情况下,这是文章内容的第一段,但可以通过在 front matter 或 _config.yml 中设置一个 excerpt_separator
变量来自定义。
---
excerpt_separator: <!--more-->
---
Excerpt with multiple paragraphs
Here's another paragraph in the excerpt.
<!--more-->
Out-of-excerpt
下面是一个输出带有摘录的博客文章列表的示例:
<ul>
{% for post in site.posts %}
<li>
<a href="{{ post.url }}">{{ post.title }}</a>
{{ post.excerpt }}
</li>
{% endfor %}
</ul>
Drafts
草稿是文件名中没有日期的文章。它们是你仍在处理的文章,但还不想发布。要启动并运行草稿,请在站点根目录中创建一个 _drafts
文件夹,然后创建您的第一份草稿:
.
├── _drafts
│ └── a-draft-post.md
...
要使用草稿预览您的网站,请使用 --drafts
开关运行 jekyll serve
或者 jekyll build
。每篇草稿都将被分配草稿文件的修改时间值,来作为它的日期,因此您将看到当前编辑的草案作为最新的文章。