内容视图模板
以下是内容视图的常见用例
创建内容视图
要创建新视图,请在每个不同的内容类型目录中创建带有视图名称的模板。以下示例包含 posts
和 project
内容类型的“li”视图和“summary”视图。正如您所见,这些视图与单页模板 single.html
相邻。您甚至可以为给定的类型提供特定视图,并继续使用 _default/single.html
作为主要视图。
layouts/
├── posts/
│ ├── li.html
│ ├── single.html
│ └── summary.html
├── project/
│ ├── li.html
│ └── single.html
└── summary.html
将渲染哪个模板?
以下是按特异性排序的内容视图的查找顺序。
/layouts/<TYPE>/<VIEW>.html
/layouts/<SECTION>/<VIEW>.html
/layouts/_default/<VIEW>.html
/themes/<THEME>/layouts/<TYPE>/<VIEW>.html
/themes/<THEME>/layouts/<SECTION>/<VIEW>.html
/themes/<THEME>/layouts/_default/<VIEW>.html
示例:列表中的内容视图
list.html
在此示例中,.Render
被传递到模板以调用render 函数。.Render
是一个特殊的函数,它指示内容使用作为第一个参数提供的视图模板来呈现自身。在这种情况下,模板将渲染以下 summary.html
视图
layouts/_default/list.html
<main id="main">
<div>
<h1 id="title">{{ .Title }}</h1>
{{ range .Pages }}
{{ .Render "summary" }}
{{ end }}
</div>
</main>
summary.html
Hugo 将 Page
对象传递给以下 summary.html
视图模板。
layouts/_default/summary.html
<article class="post">
<header>
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
<div class="post-meta">{{ .Date.Format "Mon, Jan 2, 2006" }} - {{ .FuzzyWordCount }} Words </div>
</header>
{{ .Summary }}
<footer>
<a href='{{ .RelPermalink }}'>Read more »</a>
</footer>
</article>
li.html
继续前面的示例,我们可以通过更改对 .Render
函数的调用中的参数(即 {{ .Render "li" }}
)来更改渲染函数以使用较小的 li.html
视图。
layouts/_default/li.html
<li>
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
<div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
</li>