第5章 使用GO模板语言定制页面和定制内容

第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节中,我们将使用本章所学内容,通过作为开发人员提供一些内容自动化来帮助进行内容编辑。

图5.1 Hugo结合标记内容编译layouts文件夹中提供的模板文件,以生成网页的HTML内容。 开发人员提供模板文件并使用一些内容来确保Hugo构建过程正确地为网页生成内容。 本章经历了开发人员需要在创建模板和生成网页内容之间的程序逻辑,。