第5章 使用Go模板语言定制页面和定制内容 #
本章涵盖
- 自定义页面和ShortCode
- 以Go模板语言呈现内容并访问变量和函数
- 在代码中访问Hugo的配置和front matter
- 从文件系统中读取
- 创建称为Archetype的可重复使用的页面模板
Hugo的一个优势是它在内容 (Markdown) 和外观 (HTML/CSS/JavaScript) 之间明确区分了关注点。 当我们创建内容时,我们很少需要处理HTML。 不精通HTML或CSS的团队成员可以使用Hugo作为内容管理系统,使用我们到目前为止在本书中讨论过的功能来获得收效。 然而,我们可以通过更深入地研究布局和HTML生成来释放更多的能量。
第2章有一节中我们跳出了主题,以纯HTML创建主页。 在这样做的过程中,我们暂时放弃内容创建者的角色,进入Web开发人员模式,同时主要为其它页面提供内容。 在本章中,我们将在改进Acme Corporation网站的主页时获得有关Hugo模板语言及其渲染机制的第一手经验。 此外,我们还将根据静态HTML页面无法提供的内容添加一些特性。
我们目前为Acme Corporation网站提供的纯HTML index页面内容和布局混合在一起。 这种方法有一大堆问题:
- 我们不能在页面之间共享部件,HTML片段或数据。
- 数据和布局散布在HTML文件中,因此更改文本内容需要了解HTML。
- HTML不像Markdown和YAML那样容易让人读。
- HTML没有变量、条件和循环,这使得管理内容重复的页面变得困难。
即使对于单个页面,使用模板逻辑编写也比使用纯HTML更好。 我们可以通过使用模板而不是简单的HTML来简化网站的可维护性。 Hugo的一个重要好处是模糊了主题和内容之间的界限。 Hugo提供了部分使用主题覆盖部分网页特性的做法,也可以使用主题可用的所有特性编写我们的定制页面。 在接下来的两章中,我们将逐渐丢弃Eclectic主题。 并且因为我们是以渐进的方式做到这一点,我们的网站将始终能运行。
本章涉及如图5.1所示的单页模板。 在第5.1节中,我们将拆分Acme Corporation网站的索引页的布局和内容。 在第5.2节中,我们将使用Hugo根据网站其余部分的内容生成的信息来增强索引页面。 第5.3节简要介绍了使用结构化front matter和数据文件构建的数据驱动网页。 最后,在第5.4节中,我们将使用本章所学内容,通过作为开发人员提供一些内容自动化来帮助进行内容编辑。