Page bundles
By Angela C
April 26, 2021
Reading time: 4 minutes.
Page bundles are a way to group page resources. I refer to page bundles documentation at https://gohugo.io.
This post is a page bundle. A page bundle is any directory within the content/
directory that contains an index.md
page.
A page bundle can be a leaf bundle or a branch bundle.
- A leaf bundle is a collection of content and attachments for single pages such as this post.
This post is a leaf bundle. The index file name is index.md
. To create a page bundle you use the hugo new <section>/<post-name>/index.md
. For example to create a new page bundle post called “my-page-bundle-post” use the command hugo new post/my-page-bundle-post/index.md
instead of hugo new post/my-page-bundle-post.md
.
- A branch bundle is a collection of attachments for section pages such as the home page section, taxonomy terms etc.
The index file name for a branch bundle post is _index.md
. Only non-page resources such as images and pdfs are allowed for branch bundles while page resources are also allowed for leaf bundles.
Content Sections
Hugo Content Management / Sections
-
A Section is a collection of pages that gets defined based on the organization structure under the
content/
directory. -
All first-level directories under
content/
form their own sections (root sections). -
To define a section at a deeper level you need to create a branch bundle - a directory with an
_index.md
file.hugo new posts/my-post/_index.md
. -
Sections can be nested as deeply as desired but to make the section fully navigational, at least the lower-most section needs a content file, i.e. a
_index.md
file. -
A
_index.md
file has a special role in Hugo, allowing front matter and content to be added to the list templates.
Some of my projects are quite long to have on a single page. I would like to have a project that can reference other markdown files within the same project’s directory.
-
A project created as a single page or a page bundle (with an
index.md
) file will appear in the list of projects using{{ range (where .Site.RegularPages "Type" "in" "projects")}}
or.Paginator.Pages.
This lists each page in the entire site that are in the “projects” content section. (.Pages
also works). -
A project page bundle created with an
_index.md
file will not appear when.Paginator.Pages
is used for the projects list template. -
.RegularPagesRecursive
should list all regular pages under a list page, including regular pages in nested sections / list pages.)
For example I first created a test project called testlinks
using hugo new projects/testlinks/_index.md
and then created two markdown pages “testpage1.md” and “testpage2.md” within the “testlinks” project directory.
* hugo new projects/testlinks/testpage1.md
* hugo new projects/testlinks/testpage2.md
The “testlinks” project will not show up in the list of projects but the two markdown pages created within the bundle will be picked up by .Site.RegularPages
.
-
link to testlinks project A project created with an
_index.md
file which does not show up in the list of projects -
From within
testlinks
project I can link to the two markdown pages using just the name of the markdown file name (without the “.md” extension.) as follows:testpage1
test1page
-
I can also link to the “testlinks” project
_index.md
page from another (single page) project using../testlinks
and to one of the markdown files within it using../testlinks/testpage1
. -
Using
.RegularPagesRecursive
in theprojects/list.html
template will list “testpage1” and “testpage2” file but nottestlinks
itself while{{ range .Paginator.Pages }}
will only list the names of the projects created as single page posts or using an.index.md
file but not an_index.md
project such as testlinks. It uses an internalpagination.html
template.
I can link to another project such as simulation project (created as a page bundle with an index.md
file) but not the “page2.md” file created within the simulations project directory.
So I can link to markdown posts within a project page bundle if the page bundle has a _index.md
file.
But I cannot link to markdown posts within a project page bundle if it has an index.md
file.
On the other hand the page bundle created with a index.md
file will show up in the list of projects (using .Paginator.Pages
) but the page bundle created with a _index.md
file will not show up in this list page. The markdown files within the project folder will appear when using .Site.RegularPages
in projects.