Jekyll 语句语法、功能的实现方法和结构介绍小手册

news2024/12/23 12:12:15

本文很长,建议使用侧边栏进行跳转。

本文虽然按照由浅入深的顺序介绍了 Jekyll 的语句语法和功能结构,但是主要用于快速查询一些 Jekyll 语句、功能的实现方法和结构介绍。

如果你想:
了解查看一些常用的 Jekyll 的相关命令和选项还请查看:《Jekyll 选项(options)和子命令(subcommand)小手册》。
了解 Jekyll 的原理和网站结构具体介绍还请查看:《Jekyll 的机制、转换步骤和结构介绍》。
如何使用 Jekyll 和 GitHub 搭建一个个人博客网站请移步:《还没写好,写完更新本博客》

Jekyll 特色主要在语句结构两个方面,由于结构多是基于语句的,所以接下来我们先了解一下 Jekyll 的语句特色,然后再细说结构部分的特色。

前提

本文假设你已经设置好 GitHub Pages 的相关设置,并且已经克隆到本地了。

语句方面

变量

在 Jekyll 中,变量需要写在最开头的---之间,如下:

---
my_number: 5
title: ZhongUncle 的博客主页
---

这部分也被称为前事项(Front Matter)。这部分是空的也没关系,可以写作下面这样:

---
---

Liquid

Jekyll 的特色是因为使用 Liquid。Liquid 是一个模板语言,主要有三个部分:

  • 对象(Objects)
  • 标签(Tags)
  • 过滤器(Filters)

对象(Objects)

对象告诉 Liquid 将变量替代成页面上的内容再进行输出,格式如下:

{{ ... }}

举个例子,下面这行代码将会被替代成page.title的内容,然后输出显示:

{{ page.title }}

标签(Tags)

标签定义了模板的逻辑和控制流程。格式如下:

{% ... %}

举个例子,下面这段代码将会循环生成一个posts文件下所有博客的专栏,每条都可以点击跳转:

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

实际效果如下:
请添加图片描述

过滤器(Filters)

过滤器会改变内容的输出,由|分隔。格式如下:

{{ ... | ...}}

举个例子,下面这行代码将会大写首字母输出Hi,而不是原本的hi

{{ "hi" | capitalize }}

实践

在了解了变量和 Liquid 之后,让我们来实践一下,加深理解。

将上一章中那个简单的index.html的内容修改成如下:

---
title: ZhongUncle 的博客主页
---
<!DOCTYPE html>
<html>
	<head>
	    <meta charset="utf-8">
	    <title>{{title}}</title>
  	</head>
  	<body>
    	<h1>{{Hello World! | downcase}}</h1>
  	</body>
</html>

这时候使用jekyll build生成,或者使用jekyll server查看生成的index.html会发现如下:

<!DOCTYPE html>
<html>
	<head>
	    <meta charset="utf-8">
	    <title>ZhongUncle 的博客主页</title>
  	</head>
  	<body>
    	<h1>hello world!</h1>
  	</body>
</html>

可以看到变量被替换了,过滤器也对内容进行修改,

结构方面

接下来说一说结构方面的一些特色,例如如何创建布局模板、导航栏、博客列表等。Jekyll 在这方面的很多设计都是方便网站开发的(尤其是针对博客网站)。

如果你想了解的是项目的文件结构,那么还请移步查看我的另外一篇博客:《Jekyll 的机制、转换步骤和结构介绍》

Layouts(布局模板)

Layouts 是 Jekyll 中有助于复用开发的设计,可以理解成一个模板。

基础使用

我们来假设一个场景,假设我们的网站有 1000 个 网页,这一千个网页的格式都可以抽象为如下:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>......</title>
        <link rel="stylesheet" type="text/css" href="assets/css/blogslist.css" />
    </head>
    <body>
        ......
    </body>
</html>

可以发现这一千个网页都使用相同的设置和 CSS,唯一不同的地方就是<title><body>部分,如果不使用框架,那么就得每次都复制粘贴一下,也挺麻烦的。这时候要是使用 Layouts 就简单多了。

我们来试试看,也不用生成 1000 个网页,就用之前的index.html即可。

首先,在仓库的根目录下新建一个名为_layouts的文件夹,然后在其中新建一个名为default.html的文件。然后在其中输入以下内容:

<!DOCTYPE html>
<html>
	<head>
	    <meta charset="utf-8">
	    <title>{{ page.title }}</title>
  	</head>
  	<body>
    	{{ content }}
  	</body>
</html>

然后,将index.html中的内容改成如下:

---
layout: default
title: ZhongUncle 的博客主页
---
<h1>Hello World!</h1>

这时候使用jekyll build生成,Jekyll 将会使用之前default.html创建的“default”模板,然后将用index.html中的 HTML 代码替换模板中的{{ content }}部分,并且还会将对应的变量进行替换。

这时候检查生成的index.html即可验证,内容应该如下:

<!DOCTYPE html>
<html>
	<head>
	    <meta charset="utf-8">
	    <title>ZhongUncle 的博客主页</title>
  	</head>
  	<body>
    	<h1>Hello World!</h1>
  	</body>
</html>

这样就可以大大减少开发中的重复工作。

嵌套使用

Layouts 也可以嵌套使用,这样就可以在一个 Layout 的基础上,对不同类型的网页使用不同的模板。

举个例子,如果在_layouts文件夹中新建一个名为post.html的文件,内容如下:

---
layout: default
---
<h1>{{ page.title }}</h1>
<p>{{ page.date | date_to_string }} - {{ page.author }}</p>

{{ content }}

这样使用post模板生成的网页,就会在前面default模板的基础上,在<body>开头加上两行关于文章标题、日期和作者的内容。

导航栏(眉头、脚注同理)

导航栏是很多网站的重点,除了方便用户跳转之外,还可以显示体现站点的结构。Jekyll 也提供了很方便的设计供我们使用。

首先在仓库的根目录新建一个名为_data的目录,然后在其中新建一个名为navigation.yml的配置文件。然后在其中输入:

- name: 主页
  link: /index.html
- name: 博客专栏
  link: /blogs.html

然后再新建一个名为_includes的目录,然后在其中新建一个名为navigation.html的 HTML 文件,来作为导航栏内容的模板。在其中输入以下内容来循环生成导航栏中的每个项目,从而生成一个导航栏:

<!-- 这个文件里是用来生成导航栏的 -->
<div class="header">
    {% for item in site.data.navigation %}
        <a href="{{ item.link }}" class="headerItem">
            {{ item.name }}
        </a>
    {% endfor %}
</div>

这样便可生成下面这样的内容(当然这里只是为了演示,没有说明布局文件和 CSS):
请添加图片描述
如果我们想增加或修改导航栏的内容,只需要更改_data/navigation.yml的内容即可。

生成博客列表

作为博客网站,我们肯定希望有博客列表,这样方便用户查看。

首先,我们在根目录下新建一个名为blogs.html的 HTML 文件,用来展示生成的博客列表。下面这段代码将会按照“标题-大致内容”的顺序生成一个博客列表:

---
layout: default
title: Blog
---
<h1>Latest Posts</h1>

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

然后我们在根目录中新建一个名为_posts的目录用于存放所有的博客。博客的标题要用时间-标题.后缀的格式,例如2018-08-20-bananas.md。这样 Jekyll 会自动生成符合博客的时间的路径来存放博客,方便管理和展示。这里使用两个 Jekyll 官方的示例,我们需要在posts目录中创建下面两个文件。

2018-08-21-apples.md的内容如下:

---
layout: article
---
An apple is a sweet, edible fruit produced by an apple tree.

Apple trees are cultivated worldwide, and are the most widely grown species in
the genus Malus. The tree originated in Central Asia, where its wild ancestor,
Malus sieversii, is still found today. Apples have been grown for thousands of
years in Asia and Europe, and were brought to North America by European
colonists.s da fa f

2018-08-20-bananas.md的内容如下:

---
layout: article
---
A banana is an edible fruit – botanically a berry – produced by several kinds
of large herbaceous flowering plants in the genus Musa.

In some countries, bananas used for cooking may be called "plantains",
distinguishing them from dessert bananas. The fruit is variable in size, color,
and firmness, but is usually elongated and curved, with soft flesh rich in
starch covered with a rind, which may be green, yellow, red, purple, or brown
when ripe.

这时候生成站点,跳转到博客列表就可以就可以看到下面这样的内容:
请添加图片描述
这样每次写完更新一篇博客之后,Jekyll 会自动生成新的列表。

希望能帮到有需要的人~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第六章第一节:图的基本概念和存储及基本操作

文章目录1. 图的基本概念1.1 图逻辑结构的应用1.2 无向图&#xff0c;有向图1.3 简单图&#xff0c;多重图1.4 顶点的度&#xff0c;入度和出度1.5 顶点和顶点的关系描述1.6 连通图&#xff0c;强连通图1.7 研究图的局部——子图1.8 生成树1.9 生成森林1.10 边的权&#xff0c;…

手机怎么实现图片转文字操作?学会这三招就够了

随着互联网不断发展&#xff0c;我们手机的功能越来越丰富&#xff0c;现在基本上只需要一部手机&#xff0c;就能满足我们的多样化需求。比如想要提取书本中的文字&#xff0c;我们不需要再手动输入&#xff0c;只要将文字内容拍照下来&#xff0c;利用一些软件来提取图片中的…

【深度学习】argparse模块一些学习心得体会(2)| parser.parse_known_args() |位置参数 可选参数

文章目录前言一、位置参数和可选参数二、parser.parse_known_args()前言 之前我们写了一期命令行模块的使用介绍&#xff0c;但是依然有很多语法是没有介绍到的&#xff1a;比如parser.parse_known_args()这样的命令。这样的命令大量出现在各大开源项目中&#xff0c;今天我就…

外汇天眼:官网虚假宣传受到多重监管!FCA率先发出警告!

11月16日&#xff0c;英国金融行为监管局( FCA )发出最新警告&#xff0c;提示投资者警惕与 Trade Top FX 这家未经授权的公司打交道。 FCA警告称&#xff1a;Trade Top FX 在未经我们授权的情况下在英国提供金融服务或产品&#xff0c;如果一旦遭受资金损失&#xff0c;您将无…

Word处理控件Aspose.Words功能演示:在 Python 中比较两个 Word 文档

在各种情况下执行 Word 文档的比较以确定差异。各种在线工具允许您比较 Word 文档&#xff0c;但是&#xff0c;您可能需要在应用程序中实现比较功能。为实现它&#xff0c;本文展示了如何在 Python 中比较两个 Word 文档。 Aspose.Words for . Python 最新下载&#xff08;qu…

子容器在启动期间失败

​ 遇错&#xff1a; 今天遇到一个Bug&#xff1a;A child container failed during start 中文翻译为&#xff1a;子容器在启动期间失败 事情是这样的&#xff0c;一开始我在做案例的时候使用的tomcat是本地集成的&#xff0c;项目能正常运行&#xff1b; 后来我将tomcat的…

Dopamine-PEG-N3,DOPA-PEG-azide,水溶性PEG试剂供应

1、名称 英文&#xff1a;Dopamine-PEG-N3&#xff0c;DOPA-PEG-azide 中文&#xff1a;多巴胺-聚乙二醇-叠氮 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Azide PEG Dopamine PEG 4、分子量&#xff1a;可定制&#xff0c;有2k、5k、3.4k、10k、20k、1k 5、质量…

【salesforce】Lightning Web Component Study Log —— Part 2

持续学习中… 文章目录版本管理V1.0.01. The Lightning Web Components Model1.1 Web演变1.2 LWC1.3Aura和LWC的互用性2. Creating Lightning Web Components2.1 在VSCode定义一个LWC组件2.2 文件构成2.3 客户端-服务端体系结构2.4 基础UI组件-JS2.5 基础UI组件-HTML2.6 基础UI…

艾美捷PEG-2000 DMG解决方案

艾美捷PEG-2000 DMG英文全名1,2-dimyristoyl-rac-glycero-3-methoxypolyethylene glycol-2000&#xff0c;中文名可对应翻译为二肉豆蔻酰甘油-聚乙二醇2000。它的分子式为C122H242O50&#xff0c;分子量2509.2&#xff08;平均值&#xff09;&#xff0c;代表结构如下&#xff…

数字IC手撕代码-XX公司笔试真题(串并转换控制)

前言&#xff1a; 本专栏旨在记录高频笔面试手撕代码题&#xff0c;以备数字前端秋招&#xff0c;本专栏所有文章提供原理分析、代码及波形&#xff0c;所有代码均经过本人验证。 目录如下&#xff1a; 1.数字IC手撕代码-分频器&#xff08;任意偶数分频&#xff09; 2.数字…

JetsonNano部署yolo5 c++ onnx

编译OpenCV最新4.5.x版本 Jetson Nano自带的OpenCV版本比较低&#xff0c;Jetpack4.6对应的OpenCV版本为4.1的 而OpenCV当前最新版本已经到了4.5跟4.6了&#xff0c;4.5.x中OpenCV DNN支持了很多新的模型推理跟新的特性都无法在OpenCV4.1上演示&#xff0c;所以我决定从源码编…

Go语言 02

2.1 下载安装 Go Golang 中文网 Go 的安装也是十分的简洁、简单。就是 Next。哈哈 ~ 输入 go version 来查看是否安装完成吧 ~ 2.2 配置环境变量和工作目录 GOROOT&#xff1a;C:\Environment\Go 意味着 Go 在哪里。 在配置 GOPATH 之前&#xff0c;先把用户的 GOPATH 删掉。…

远程预付费电能管理系统在工业园的应用,主要功能有哪些?

安科瑞 李可欣 具体可咨询&#xff1a;Acrel_lkx 0概述 本项目为凌云工业园提供解决方案。本项目共有DDSY1352-NK/DTSY1352-NK预付费计量表41台&#xff0c;针对凌云工业园商业用电实现用电的智能化管理&#xff0c;通过安科瑞终端预付费电能表计来计量每个商铺的用电量&am…

web前端-html-css-background背景(color样式,image图片,repeat重复方式,position定位,简写)

背景 背景样式和背景图片重复方式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">.box1 {width: 1024px;height: 724px;margin: 0 auto;/*设置背景样式*/backgr…

Go-Zero环境搭建

Go-Zero环境搭建go-zero 需要安装的组件1 Protobuf下载安装需要先下载protoc执行器2 Protobuf下Go、GRPC插件的安装3 goctl 安装go-zero 需要安装的组件 protocprotoc-gen-goprotoc-gen-go-grpcgoctl 1 Protobuf下载安装 需要先下载protoc执行器 到 https://github.com/pro…

磷酸酶、转录因子、KRAS ——“不可成药”靶点?

不可成药的三大类靶点 传统的药物靶点绝大部分是具有适合的结合位点和明确的活性位点的蛋白质。药物分子往往通过“占位驱动”的药理学作用模式发挥作用。这种方法虽然可行&#xff0c;但并不能适用于所有的靶蛋白&#xff0c;尤其是在蛋白本身缺乏相应的结合口袋、蛋白的内源性…

天然产物化合物库

据文献报道&#xff0c;在传统药物研发时代&#xff0c;天然产物是新药研发最重要的、也几乎是独有的源泉&#xff0c;当时超过 80% 的药物均是原始天然产物或者其类似物&#xff1b;随着有机化学、药物化学、计算机技术等的发展&#xff0c;即使到了人工合成小分子药物占主导地…

Neo4J超详细专题教程,快来收藏起来吧

Neo4J超详细教程 Lecture&#xff1a;波哥 一、Neo4J相关介绍 1.为什么需要图数据库 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系 网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随…

webpack5 import动态导入实现按需加载并给文件统一命名

想要实现按需加载,动态导入模块。还需要额外配置: console.log("hello main");document.getElementById("btn").onClick = function () {// 动态导入 --> 实现按需加载 -->then是加载成功要做的处理不处理的话可以不写import( "./js/math.j…

【yarn】任务日志丢失问题分析

【yarn】任务日志丢失问题分析 故事背景 今天中午收到了一个报警邮件通知。内容大致为&#xff1a;有一个正在 yarn上运行的flink的实时任务挂掉了。 针对上述的现象&#xff0c;我们的开发工程师先打开yarn的web ui找到对应的job的任务页面。查询任务日志。 点击这个log&am…