惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
量子位
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
爱范儿
爱范儿
博客园 - 【当耐特】
Vercel News
Vercel News
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
博客园 - 叶小钗
博客园_首页
V
Visual Studio Blog
宝玉的分享
宝玉的分享
B
Blog
MyScale Blog
MyScale Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
V
V2EX

Fooleap's Blog

渴望理想 | Fooleap's Blog 19 年底一些事 | Fooleap's Blog 藉秋风,跑起来 | Fooleap's Blog 一个人去跑步 | Fooleap's Blog 8 月的跑量仿佛是那暑假的作业 | Fooleap's Blog 三伏天跑步那么难受,为何还要跑? | Fooleap's Blog 解决小程序开发“当前系统代理不是安全代理” | Fooleap's Blog 忘却配速的夏日跑步 | Fooleap's Blog 六月天时“带水”跑步更爽 | Fooleap's Blog 出来混迟早要还的 | Fooleap's Blog 跑步不能当饭吃 | Fooleap's Blog 将京东移动端详情页链接转为 PC 端 | Fooleap's Blog 不是热就是雨 | Fooleap's Blog 这半月,我跑了 11 个 520 | Fooleap's Blog 跑完流汗一时爽,一直流汗一直爽 | Fooleap's Blog 初夏夜跑 | Fooleap's Blog Electron 中打开 QQ 临时会话 | Fooleap's Blog 春节期间的培隆角 | Fooleap's Blog 从春天跑到夏天 | Fooleap's Blog 晨雾中奔跑 | Fooleap's Blog 漫步春雨中 | Fooleap's Blog 跑在木棉花下 | Fooleap's Blog 我在春节依然坚持跑步 | Fooleap's Blog 伴随着日出跑步 | Fooleap's Blog 没有最好,只有更好 | Fooleap's Blog 电子气温计 | Fooleap's Blog 渡亭小学的金凤花 | Fooleap's Blog 随心而跑 | Fooleap's Blog 2018 跑步小结 | Fooleap's Blog 在 gVim 中使用“非等宽字体” | Fooleap's Blog
为 Jekyll 添加一个简单的 API | Fooleap's Blog
fooleap · 2017-05-14 · via Fooleap's Blog

Jekyll 是静态博客生成器,只能生成静态页面,原则上是没法创建一个动态的 API。但灵活利用 Liquid 的语法,还是可以创建一个简单的静态的 API,也就是说传参无效的,直接返回 JSON 数据的 API。

Jekyll 可以生成静态的 HTML 页面,也可以生成其他文本格式的文件。只要稍微一改,便可生成一个包含 JSON 数据的文件,这也就是 API。

下面以一个简单的例子来看看是怎么实现的。

确定需求

Jekyll 有分页功能,这是由一个官方的插件 jekyll-paginate 提供的[1]。这个插件会给文章列表分页,并生成页数相应的页面文件。

我们想要实现不刷新的分页,可以直接在一个页面输出所有文章列表,经 CSS 实现显隐,并通过 JS 来进行 DOM 操作即可。这样是不完美的,如果文章够多,列表项足够复杂,页面会很大,若带上图,那就更加酸爽了。

这时候,若有个简单的 API 就好了,这个 API 一般是这样的:传入页数输出相应的文章数据。前面已经说过,Jekyll 实现的 API 没法实现传参,那么这个 API,只能是返回所有文章数据。

实现需求

那么,应该如何创建这样一个 API 呢?这才是关键,我们很懒,遇到问题第一时间不是自己苦想怎么实现,而是进行 Google 搜索,这不,随便一搜有不少答案[2][3]

以下代码将创建一个文件,包含所有文章的数组,每篇文章有标题、链接、分类、时间、标签等属性。

---
layout: null
permalink: /post.json
---
[{% for post in site.posts %}
    {
        "title": {{ post.title | jsonify }},
        "url": {{ post.url | jsonify }},
        "category": {{ post.category | jsonify }},
        "date": {{ post.date | jsonify }},
        "tags": {{ post.tags | jsonify }}
    }{% unless forloop.last %},{% endunless %}
{% endfor %}]

其中所用到的 Liquid 语法主要有标签 forunless 以及过滤器 jsonify

参考资料

本文历史

  • 2017 年 05 月 14 日 完成初稿

最近更新

猜你喜欢