布局
设置渲染页面的布局
布局是包裹着你的内容的模板。它们允许你将模板的源代码放在一个地方,这样你就不必在每个页面上重复导航和页脚等内容。
布局文件从一个名为 _includes
的特殊目录加载。这个目录不仅可以包含布局文件,还可以包含其他文件,因此一个好的做法是将它们保存在一个子目录中,例如 _includes/layouts
。
在下面的页面中,我们定义了变量 layout
,并指定了我们想要使用的模板的名称:
---
title: 这是 Front Matter
layout: layouts/main.vto
---
# 这是页面内容
你可以在这里编写 Markdown 内容
Lume 支持许多模板引擎。在这个例子中,布局文件使用了扩展名 .vto
,这是 Vento 模板引擎使用的扩展名:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
</head>
<body>
<main>
{{ content }}
</main>
</body>
</html>
Lume 将会搜索文件 _includes/layouts/main.vto
(注意所有的布局文件都相对于 _includes
目录)。
模板可以使用页面中的任何变量,例如,title
来渲染标题,以及 content
来渲染页面的 Markdown 内容。
布局数据
布局可以拥有额外的数据,这些数据将与页面中的数据合并。请注意,页面中定义的变量优先级高于布局中的变量。这意味着你可以在布局中设置默认值,并在页面中覆盖它们。
一个布局可以被另一个布局包裹。只需在 Front Matter 中设置 layout
变量。在下面的例子中,该布局使用了 layouts/main.vto
布局作为包装器。
---
title: 这是 Front Matter
layout: layouts/page.vto
---
# 这是页面内容
你可以在这里编写 Markdown 内容
---
title: 默认页面标题
language: en
layout: layouts/main.vto
---
<article lang="{{ language }}">
<header>
<h1>{{ title }}</h1>
</header>
{{ content }}
</article>
---
title: 默认主标题
language: en
---
<!doctype html>
<html lang="{{ language }}">
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
</head>
<body>
<main>
{{ content }}
</main>
</body>
</html>